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

专做丰田车货款的网站望野古诗王绩

专做丰田车货款的网站,望野古诗王绩,wordpress新闻视频站,长春网站上排名基于JNI 实现 嵌套 List 类型参数解析 背景分析解决 背景 在前面两篇文章中#xff0c;我们总结了Java 调用 C/C SDK 的几种方案#xff0c;分享了JNI在实践过程中的一些踩坑点#xff0c;而在这篇文章将继续分享针对Java List类型及其嵌套类型#xff0c;我们的JNI如何接… 基于JNI 实现 嵌套 List 类型参数解析 背景分析解决 背景 在前面两篇文章中我们总结了Java 调用 C/C SDK 的几种方案分享了JNI在实践过程中的一些踩坑点而在这篇文章将继续分享针对Java List类型及其嵌套类型我们的JNI如何接收。 分析 如下是我的的SDK的结构体定义 struct CustomParam{std::string key;std::vectorstd::string values; };SDK的请求体入参定义如下 struct Request {std::string ref_text;std::vectorCustomParam 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 ;ListString values new ArrayList();public String getKey() {return key;}public void setWord(String key) {this.key key;}public ListString getValues() {return values;}public void setValues(ListString values) {this.values values;} }● 关于native的方法申明如下 public class CustomParamNative {public static native int starts(ArrayListObject 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.hJNIEXPORT 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::vectorstd::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://www.tj-hxxt.cn/news/130745.html

相关文章:

  • 怎样做校园网站推广网站的横幅怎么做的
  • 自己做的网站怎么绑域名苏州工业园区质安监站网址
  • 本土建站工作室深圳龙岗做网站公司哪家好
  • 如何网站做淘客群晖 6.1 wordpress
  • 阿里巴巴网站建设方案设计网页的快捷网站
  • 苏州网站建设自助建站模板找南昌网站开发公司电话
  • 1.简述网站建设流程做设计找素材的+网站有哪些
  • 福州模板建站定制网站做网站被骗预付款怎么办
  • 怎么学习建设网站代理IP做网站
  • 做外贸的都有那些网站seo优化网站词
  • 如何选网站建设公司小程序推广是干什么的
  • 口碑好的做网站如何进行电子商务网站推广?
  • 网站备案幕布psd58同城建网站怎么做
  • 网站定制开发怎么写seo的站外优化流程
  • 网站制作多少页网站图片上的分享怎么做
  • 网站建设都有哪些书wordpress 会员付费
  • 旅行社应做哪些网站网站建设与制作就业前景
  • 文献综述 php网站开发android 做电子书下载网站
  • 西安o2o网站设计公司用家里的路由器做网站
  • 中信建设网站欧洲最新消息
  • 全美网站开发在线flash相册网站源码
  • 岳池住房和城乡建设厅网站宝塔wordpress经常502
  • 舆情网站推荐wordpress 更换语言
  • 重庆市建设工程信息网官方网站在线设计平台市场环境
  • 气象网站建设管理总结php网站开发职责
  • 如何做自己公司的网站网站建设优化怎么做
  • 做国外零售的话是在什么网站开店怎样给网站做外链
  • 网页制作与网站建设期末考试注册网站会员会泄露信息吗
  • 烟台网站建设联系电话专业低价建设微网站微商城怎么样
  • 云南建设厅网站职称评定免费建设自己的文学网站