完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们今天这一章来说一下List《类》的数据返回方法。
实现原理 我们在JAVA中生成LIst《类》的方式就是先实例化一这个ArrayList,然后在把当前面定义好后,通过List的add的方法增加。如下: public void btnclick(View view) public void btnclick(View view) { List《CProduct》 products=new ArrayList《》(); for (int i=0; i 《 4; i++) { CProduct product=new CProduct(); product.incode=“000”+i; product.fname=“商品”+i; product.price=3; product.qty=10; products.add(product); } } 在JNI中其实也是按这个方式进行增加的,只不过在JNI中写起来可能要麻烦些。 代码实现 我们还是接着上面的DEMO,因为已经建好CProduct的类了,所以我们这里就不再创建了。 首先在VaccaeJNI中定义人们的方法getlistproduct() 然后按ALT+ENTER让其在native-lib.cpp中直接创建我们的JNI方法 然后开始写我们的在JNI中方法的代码 一、获取ArrayList的类引用 二、获取ArrayList的构造函数ID并创建一个ArrayList对象 三、获取ArrayList的Add函数的ID,准备在循环中调用 四、获取CProduct类并定义类中的各个属性 五、通过循环生成CProduct然后添加到我们的ArrayList中 六、输出我们的ArrayList 完整的方法代码 extern “C” JNIEXPORT jobject JNICALL Java_dem_vac_vaccaendk_VaccaeJNI_getlistproduct(JNIEnv *env, jclass type) { //获取ArrayList类引用 jclass list_jcls = env-》FindClass(“java/util/ArrayList”); if (list_jcls == NULL) { LOGI(“ArrayList没找到相关类!”); return 0; } //获取ArrayList构造函数id jmethodID list_init = env-》GetMethodID(list_jcls, “《init》”, “()V”); //创建一个ArrayList对象 jobject list_obj = env-》NewObject(list_jcls, list_init, “”); //获取ArrayList对象的add()的methodID jmethodID list_add = env-》GetMethodID(list_jcls, “add”, “(Ljava/lang/Object;)Z”); //然后获取我们的CProduct类的class jclass jcls = env-》FindClass(“dem/vac/vaccaendk/CProduct”); if (jcls == NULL) { return 0; } //定义类里面的属性 jfieldID incode = env-》GetFieldID(jcls, “incode”, “Ljava/lang/String;”); jfieldID fname = env-》GetFieldID(jcls, “fname”, “Ljava/lang/String;”); jfieldID price = env-》GetFieldID(jcls, “price”, “F”); jfieldID qty = env-》GetFieldID(jcls, “qty”, “I”); for (int i = 0; i 《 5; i++) { //首先实例化类 jobject jobj = env-》AllocObject(jcls); //然后对类中的各属性赋值 //商品编码 char *code = new char[5]; sprintf(code,“0000%d”,i); env-》SetObjectField(jobj, incode, env-》NewStringUTF(code)); //商品名称 char *tmpname = const_cast《char *》(“名称”); char *name = new char[strlen(tmpname) + strlen(code)]; strcpy(name, tmpname); strcat(name, code); env-》SetObjectField(jobj, fname, env-》NewStringUTF(name)); //价格 env-》SetFloatField(jobj, price, i); //数量 env-》SetIntField(jobj, qty, i + 10); env-》CallBooleanMethod(list_obj, list_add, jobj); } return list_obj; } |
|
|
|
只有小组成员才能发言,加入小组>>
944浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-4 17:38 , Processed in 0.652639 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号