相信在使用jni的过程中,总是要传递各种各样的类型,在这其中,我也碰到了一些问题。

简单的传一些内容,相信在网上一搜一大把。

所以我们就来说说。传递对象中包含arraylist吧。

在这里先给大家一个连接,显示一些jni的传递:http://blog.csdn.NET/u_xtian/article/details/6033963

所以,我们定义一些Java中的类

user.java

public class User{

private long id;

private boolean isMan;

}

name.java

public class People{

private int id;

private  ArrayList<User>  myuser;

}

public class Hello{

static{

System.loadLibrary("user");

}

public native  void  SetUser(People people);

}

C语言中:

#include<jni.h>

JNIEXPORT void JNICALL Java_Hello_SetUser(JNIEnv*,
 jobject jthiz, jobject people);

JNIEXPORT void JNICALL Java_HelloJni_setUserList 
(JNIEnv *env, jobject jthiz, jobject people)

{

jclass peo_cls = env->GetObjectClass(people);

if(peo_cls == NULL)
                {
                  return ;
                }

jfieldID idFieldID = env->GetFieldID(peo_cls,"id","I"); //获得得People类的属性id
                jint id= env->GetIntField(people, idFieldID );  //获得属性值

jfieldID codeFieldID = env->GetFieldID(peo_cls,"myuser","Ljava/util/ArrayList;");

jobject codeobj = env->GetObjectField(people, codeFieldID);

if(codeobj == NULL)
                {
                    return  ;
                }

int i;
                jclass cls_arraylist = env->GetObjectClass(codeobj);
                //method in class ArrayList
                jmethodID arraylist_get = env->GetMethodID(cls_arraylist,"get","(I)Ljava/lang/Object;");
                jmethodID arraylist_size = env->GetMethodID(cls_arraylist,"size","()I");
                jint len = env->CallIntMethod(codeobj,arraylist_size);
                for(i=0;i<len;i++){
                    jobject obj_user = env->CallObjectMethod(codeobj,arraylist_get,i);
                    jclass cls_user = env->GetObjectClass(obj_user);

jfieldID idFieldID = env->GetFieldID(cls_user,"id","J"); // 获得属性ID
                    jfieldID isManFieldID = env->GetFieldID(cls_user,"isMan","Z"); // 获得属性ID

jint id= env->GetIntField(obj_user , idFieldID );//获得属性值
                    jboolean isMan= env->GetBooleanField(obj_user ,isManFieldID );//获得属性值

}

这样就完成了。在对象object中包含有arraylist的对象。

jni传递对象中包含arraylist对象。的更多相关文章

  1. queryRuner如何获得bean对象,当这个bean对象中包含其他对象的时候

    我们知道我们可以使用dbutil的QueryRunner下的query方法使用BeanHandler得到bean对象 但是,当我们在一个表和另一个表关联的时候,往往喜欢将另一个表的关联字段变成另一个b ...

  2. C# json对象中包含数组对象时,如何存入数据库

    前端创建的的对象例如: C#端这样将数组提取出来存入

  3. spring MVC中传递的参数对象中包含list的情况

    测试需要的jar包:spring 3.2.jar +  jackson-all-1.8.5.jar. 写代码时碰到个需要将对象里的子明细一起传递到controller里去,当时就想直接将参数一起传递过 ...

  4. QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。

    关于 slot传递 Mat 对象 以前一直是使用 Qtimer 定时器,设定超时后读取 dialog 对象的 Mat成员实现在 UI 里显示图像,发现这样对以后集成其他面向过程的代码增加了复杂度. 所 ...

  5. 【ASP.NET】DataContract序列化,反序列化对象中包含用接口声明的属性时的处理方法

    为此对象添加KnownType属性(Attribute).类型为用接口声明的属性(Property)的所有可能类型.  示例如下: public interface IKey { [DataMembe ...

  6. 【web开发问题】HTTP请求POSTDATA中包含多层对象如何获取?

    postdata如下: TravelerID=&ChineseName=***&PhoneNumber=&IDNumber=&IsCommonUse=&Gues ...

  7. java后端接收前端传来的复杂对象(包含List对象集合)

    最近在和安卓对接口的时候发现往java后端传数据的时候,后台对象无法接收. 说明:后台对象为 类似结构 ObjectA{ private String  a; private String b; pr ...

  8. post 传递参数中包含 html 代码解决办法,js加密,.net解密

    今天遇到一个问题,就是用post方式传递参数,程序在vs中完美调试,但是在iis中,就无法运行了,显示传递的参数获取不到,报错了,查看浏览器请求情况,错误500,服务器内部错误,当时第一想法是接收方式 ...

  9. js传递参数中包含+号时的处理方法

    encodeURI(url).replace(/\+/g, '%2B') 例子: $scope.getAnesthesiawaystatistical = function (annual, anes ...

随机推荐

  1. npm API文档

    npm API文档 https://docs.npmjs.com/

  2. hdu 3449 Consumer (依赖01背包)

    题目: 链接:pid=3449">点击打开链接 题意: 思路: dp[i][j]表示前i个箱子装j钱的材料可以得到的最大价值. 代码: #include<iostream> ...

  3. [debug]重定义默认參数

    编敲代码过程中遇到重定义默认參数的错误,例如以下例所看到的: #include<iostream> #include<stdlib.h> using namespace std ...

  4. javascript系列-class2.javascript 基本使用

    欢迎加入前端交流群来py: 转载请标明出处!     逻辑运算             一门计算机语言,编程的核心在于逻辑思想,当我们在编写程序的时候,逻辑是否通顺,是能否正确写出程序的关键,可以说如 ...

  5. A. Amr and Music

    解题思路:给出n种乐器学习所需要的时间,以及总共的天数, 问最多能够学多少门乐器,并且输出这几门乐器在原序列中的序号(不唯一) 按照升序排序,为了学到最多的乐器,肯定要选择花费时间最少的来学习 然后用 ...

  6. 常用类Object,String类详解

    -------------------- String -----------------------1.求字符串长度 public int length()//返回该字符串的长度 String st ...

  7. .startsWith和endsWith的使用方法与说明

    a.startsWith(b) --判断字符串a,是不是以字符串b开头 a.endsWith(b) --判断字符串a,是不是以字符串b结尾

  8. MFC基础知识

    1.句柄:具有内存后,系统返回的标识符 2.消息:相当于事件,例如鼠标点击就是一个消息 3.消息队列:就是将事件按照时间的先后顺序在一个队列中 4.消息处理机制:首先操作系统拿到消息,然后将消息放到消 ...

  9. luogu P1405 苦恼的小明(欧拉定理)

    题意 求a1^a2^a3^...^an(mod10007)n<=1000000,a[i]<=10000 题解 明眼人一眼就可以看出是欧拉定理的推论. 首先这个题是错的,没说保证互质. 然而 ...

  10. 拓展Lucas小结

    拓展Lucas是解决大组合数取模非质数(尤其是含平方因子的合数)问题的有力工具... 首先对模数质因数分解,把每个质因子单独拎出来处理答案,然后用中国剩余定理(excrt)合并 问题转化为,对于每个质 ...