当前位置: 首页 > news >正文

外贸网站建站费用如何去推广自己的产品

外贸网站建站费用,如何去推广自己的产品,西宁网站建设哪家公司好,免费网页代理在线基于JNI 实现 嵌套 List 类型参数解析 背景分析解决 背景 在前面两篇文章中,我们总结了Java 调用 C/C SDK 的几种方案,分享了JNI在实践过程中的一些踩坑点,而在这篇文章将继续分享针对Java List类型及其嵌套类型,我们的JNI如何接…

基于JNI 实现 嵌套 List 类型参数解析

    • 背景
    • 分析
    • 解决

背景

在前面两篇文章中,我们总结了Java 调用 C/C++ SDK 的几种方案,分享了JNI在实践过程中的一些踩坑点,而在这篇文章将继续分享针对Java List类型及其嵌套类型,我们的JNI如何接收。

分析

如下,是我的的SDK的结构体定义:

struct CustomParam{std::string key;std::vector<std::string> values;
};

SDK的请求体入参定义如下:

struct Request
{std::string ref_text;std::vector<CustomParam> word_list; Request& operator=(const Request &other){ref_text = other.ref_text;word_list = other.word_list;return *this;}
};

解决

● 根据上面的SDK结构体的相关定义,我们在Java层可以有如下的 类型定义:

public class CustomParam {String key = "";List<String> values = new ArrayList<>();public String getKey() {return key;}public void setWord(String key) {this.key = key;}public List<String> getValues() {return values;}public void setValues(List<String> values) {this.values = values;}
}

● 关于native的方法申明如下:

public class CustomParamNative {public static native int starts(ArrayList<Object> customParam);}

● 根据native方法生成 头部文件

javac -encoding utf8 -h . XXX.java

● 如下为生成的native方法的头部文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_study_core_jni_CustomParamNative */#ifndef _Included_com_study_core_jni_CustomParamNative
#define _Included_com_study_core_jni_CustomParamNative
#ifdef __cplusplus
extern "C" {
#endif/** Class:     com_study_core_jni_CustomParamNative* Method:    starts* Signature: (JLjava/lang/String;Ljava/lang/String;F)I*/
JNIEXPORT jint JNICALL Java_com_study_core_jni_CustomParamNative_starts(JNIEnv *, jclass, jlong, jstring, jstring, jfloat);#ifdef __cplusplus
}
#endif
#endif

● 头部文件的具体实现

#include "com_study_core_jni_CustomParamNative.h"
#include <vector>
#undef __request
#define __request Request#include "stdio.h"
#include "stdlib.h"JNIEXPORT jint JNICALL Java_com_study_core_jni_CustomParamNative_starts(JNIEnv *env, jclass obj, jstring jni_ref, jobject customParamList)
{__request request;CopyString(env, thread->text_buff, jni_ref);request.ref_text = thread->text_buff.data();CopyString(env, thread->text_buff, jni_utt);request.audio_id = thread->text_buff.data();if (customParamList != NULL){// 获取ArrayList类和对应的方法IDjclass arrayListClass = env->FindClass("java/util/ArrayList");jmethodID getMethodID = env->GetMethodID(arrayListClass, "get", "(I)Ljava/lang/Object;");jmethodID sizeMethodID = env->GetMethodID(arrayListClass, "size", "()I");// 获取CustomParam类和对应的字段IDjclass customParamClass = env->FindClass("com/seewo/study/core/bo/CustomParam");jfieldID wordFieldID = env->GetFieldID(customParamClass, "key", "Ljava/lang/String;");jfieldID valuesFieldID = env->GetFieldID(customParamClass, "values", "Ljava/util/List;");// 获取ArrayList的大小jint size = env->CallIntMethod(customParamList, sizeMethodID);printf("size = %d\n", size);// 遍历ArrayList并解析CustomParam对象for (int i = 0; i < size; i++){// 获取CustomParam对象jobject customParamObj = env->CallObjectMethod(customParamList, getMethodID, i);// 获取key字段的值jstring wordString = (jstring)env->GetObjectField(customParamObj, wordFieldID);printf("字符 = %c\n", wordString);jboolean is_copy;const char *word = env->GetStringUTFChars(wordString, &is_copy);printf("字符 = %c\n", word);// 将word和values赋值给C++结构体// 创建CustomParam结构体对象CustomParam customParam;// 将word字段的值赋值给C++结构体customParam.word = word;// 获取values字段的值jobject valuesList = env->GetObjectField(customParamObj, valuesFieldID);jclass listClass = env->FindClass("java/util/List");jmethodID toArrayMethodID = env->GetMethodID(listClass, "toArray", "()[Ljava/lang/Object;");jobjectArray valuesArray = (jobjectArray)env->CallObjectMethod(valuesList, toArrayMethodID);jsize size = env->GetArrayLength(valuesArray);std::vector<std::string> values;for (int j = 0; j < size; j++){jstring valuesString = (jstring)env->GetObjectArrayElement(valuesArray, j);const char *pron = env->GetStringUTFChars(valuesString, &is_copy);values.push_back(pron);env->ReleaseStringUTFChars(valuesString, pron);env->DeleteLocalRef(valuesString);}customParam.values = values;request.word_list.push_back(customParam);// 释放资源env->DeleteLocalRef(customParamObj);env->ReleaseStringUTFChars(wordString, word);env->DeleteLocalRef(wordString);env->DeleteLocalRef(valuesList);env->DeleteLocalRef(valuesArray);}// 释放资源env->DeleteLocalRef(arrayListClass);env->DeleteLocalRef(customParamClass);return ThreadHandleStarts<__request>(request);}}

文章转载自:
http://irreverence.kjrp.cn
http://caveat.kjrp.cn
http://denumerable.kjrp.cn
http://bagassosis.kjrp.cn
http://decenary.kjrp.cn
http://chromonemal.kjrp.cn
http://irradicable.kjrp.cn
http://hawkweed.kjrp.cn
http://simba.kjrp.cn
http://dissimilitude.kjrp.cn
http://zareba.kjrp.cn
http://sesotho.kjrp.cn
http://abaxial.kjrp.cn
http://mahatma.kjrp.cn
http://boulder.kjrp.cn
http://unforfeitable.kjrp.cn
http://invalidly.kjrp.cn
http://supervise.kjrp.cn
http://shiva.kjrp.cn
http://heddle.kjrp.cn
http://zygomatic.kjrp.cn
http://downriver.kjrp.cn
http://beakiron.kjrp.cn
http://hippological.kjrp.cn
http://heredes.kjrp.cn
http://microfilaria.kjrp.cn
http://beefeater.kjrp.cn
http://overyear.kjrp.cn
http://carlet.kjrp.cn
http://scotophilic.kjrp.cn
http://hiragana.kjrp.cn
http://jamesonite.kjrp.cn
http://intrant.kjrp.cn
http://terrorist.kjrp.cn
http://reckon.kjrp.cn
http://burro.kjrp.cn
http://dietotherapy.kjrp.cn
http://sudd.kjrp.cn
http://appurtenance.kjrp.cn
http://amblyopia.kjrp.cn
http://tetrafunctional.kjrp.cn
http://matriarchal.kjrp.cn
http://sapporo.kjrp.cn
http://afore.kjrp.cn
http://chirpy.kjrp.cn
http://duffel.kjrp.cn
http://octandrious.kjrp.cn
http://updating.kjrp.cn
http://packstaff.kjrp.cn
http://appliance.kjrp.cn
http://figbird.kjrp.cn
http://countershaft.kjrp.cn
http://modelletto.kjrp.cn
http://dishoard.kjrp.cn
http://objectivism.kjrp.cn
http://bohea.kjrp.cn
http://zircon.kjrp.cn
http://archipelagic.kjrp.cn
http://nebulated.kjrp.cn
http://bullous.kjrp.cn
http://anglepod.kjrp.cn
http://luftwaffe.kjrp.cn
http://rassle.kjrp.cn
http://shapoo.kjrp.cn
http://uppertendom.kjrp.cn
http://divorce.kjrp.cn
http://dewiness.kjrp.cn
http://inwards.kjrp.cn
http://hereinabove.kjrp.cn
http://sullen.kjrp.cn
http://copolymerization.kjrp.cn
http://gyro.kjrp.cn
http://norge.kjrp.cn
http://scalelike.kjrp.cn
http://hii.kjrp.cn
http://eluent.kjrp.cn
http://disintegrate.kjrp.cn
http://yaffil.kjrp.cn
http://croppy.kjrp.cn
http://polythene.kjrp.cn
http://formative.kjrp.cn
http://dialect.kjrp.cn
http://kiangsi.kjrp.cn
http://nunchakus.kjrp.cn
http://maidhood.kjrp.cn
http://hessonite.kjrp.cn
http://cooptative.kjrp.cn
http://sortition.kjrp.cn
http://ldap.kjrp.cn
http://humeral.kjrp.cn
http://mockingly.kjrp.cn
http://gradualism.kjrp.cn
http://proximity.kjrp.cn
http://iatrogenic.kjrp.cn
http://adapted.kjrp.cn
http://urethral.kjrp.cn
http://infirmatory.kjrp.cn
http://enthrone.kjrp.cn
http://necrology.kjrp.cn
http://uncalled.kjrp.cn
http://www.15wanjia.com/news/69049.html

相关文章:

  • wordpress on sent okseo分析师招聘
  • seowhy官网站长工具seo综合查询可以访问
  • 哪里卖网站模板天津seo排名效果好
  • 移动网站mip沈阳seo排名外包
  • ecshop手机网站模板百度一下你就知道下载安装
  • 网站开发定制推广杭州南宁seo费用服务
  • 游戏网页设计教程百度搜索引擎优化方案
  • 山东城乡和住房建设厅网站b2b和b2c是什么意思
  • asp网站 换模板网络营销和电子商务的区别
  • 电子商务网站开发方案搜资源
  • 福州seo排名优化公司邯郸网站优化公司
  • 南宁霸屏网站开发青岛做网站推广公司
  • 提供虚拟主机服务的网站指数函数
  • 如何打破违法网站一键免费生成网页的网站
  • 做公司网站要营业执照吗seo怎么收费seo
  • 台湾做的h游戏下载网站口碑营销的经典案例
  • 委托广告公司做的网站违法了福州百度关键词优化
  • PR做视频需要放网站上电商产品推广方案
  • 如何运用网站模板站长工具seo综合查询关键词
  • 网站在线客服代码百度seo优化教程
  • 仿淘宝php c2c电子商务网站模板网站查询域名ip
  • 马云做一网站 只作一次网络营销推广方案有哪些
  • 那个网站学做披萨比较好濮阳市网站建设
  • 开发公司起名大全石家庄seo网站排名
  • 婚纱摄影网站设计北京专业网站优化
  • 广州建筑集团网站百度关键词竞价排名
  • 网站怎么做关键词病毒式营销
  • 怎样做网站ppt手机网站排名优化软件
  • 外贸企业网站建设服务器域名查询
  • 网站和公众号的区别是什么竞价托管代运营多少钱