前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android NDK编程(八)--- JNI中List结构的类数据做为参数

Android NDK编程(八)--- JNI中List结构的类数据做为参数

作者头像
Vaccae
发布2019-07-24 13:57:33
1.6K0
发布2019-07-24 13:57:33
举报
文章被收录于专栏:微卡智享微卡智享

前言

上一篇文章我们介绍了《Android NDK编程(七)--- JNI中List结构的类数据返回》,这章主要介绍把List结构的类做为参数在方法中进行实现。

实现目标

我们用上一章能过JNI生民的LIst<CProduct>类做为参数,把每个一生成的商品数量加上20。

实现思路

  1. 获取ArrayList的引用类
  2. 获取ArrayList里面的get()方法和size()方法,size方法用于判断传入的List总共有多少数据,我们可以做个for循环,get方法用来获取当前位置的CProduct
  3. 获取CProduct的类和类中的qty数量的属性
  4. 得到传入的List的size后进行遍历,针对遍历到的每个object的数量进行加20

代码实现

首先我们在布局文件里面加入一个新的按钮,用于区分原来生成的那个按钮

然后在VaccaeJNI的类中加入我们的修改产品信息方法

按下ALT+ENTER自动在native-lib.cpp中生成方法


写实现方法,根据上面我们写的实现思路,贴出我们的代码

代码语言:javascript
复制
extern "C"
JNIEXPORT void JNICALL
Java_dem_vac_vaccaendk_VaccaeJNI_setlistproduct(JNIEnv *env, jclass type, jobject list) {

    //获取ArrayList类引用
    jclass list_jcls = env->FindClass("java/util/ArrayList");
    if (list_jcls == NULL) {
        LOGI("ArrayList没找到相关类!");
        return;
    }

    //获取ArrayList对象的get()的methodID
    jmethodID list_get = env->GetMethodID(list_jcls, "get", "(I)Ljava/lang/Object;");
    //获取ArrayList对象的size()的methodID
    jmethodID list_size = env->GetMethodID(list_jcls, "size", "()I");
    //然后获取我们的CProduct类的class
    jclass jcls = env->FindClass("dem/vac/vaccaendk/CProduct");
    if (jcls == NULL) {
        return;
    }
    jfieldID qty = env->GetFieldID(jcls, "qty", "I");

    int size= env->CallIntMethod(list,list_size);
    for (int i = 0; i < size; i++) {
        //通过List中的get方法获取到当前的CProduct类
        jobject item=env->CallObjectMethod(list,list_get,i);
        //获取到原来的数量
        int count = env->GetIntField(item,qty);
        //在原数量上加上20
        env->SetIntField(item, qty, count+20);
    }

}

在MainActivity中把按钮2的方法中调用刚才的JNI并显示出数据来


最后我们看一下程序运行后效果

刚打开程序

按下测试按钮后效果

按下测试2的效果

-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档