相信在使用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. C/C++ 浮点数比较问题

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50255623 Never try to ...

  2. Nginx监控

    http://www.ttlsa.com/nginx/nginx-status-detail/ http://blog.csdn.net/bobpen/article/details/53431699 ...

  3. flex 通过htmlservices链接moss的rest(rest 的get post方式)

    一:flex debug(调试)--trace() --moss导入 flex学习:1.flex出现不能使用trace调试语句的问题,控制台无信息输出.这个问题不须要改动安装文件的參量. 仅仅须要下载 ...

  4. 葡萄城公布新版ActiveReports 9报表控件和报表server

    2014年11月10日---葡萄城宣布正式公布ActiveReports9,包含了三种报表模型:RDL报表.页面报表.区域报表.对于ActiveReports中的这个最新版本号中,我们专注于提高产品的 ...

  5. PHP静态延迟绑定简单演示样例

    没怎么用过这个新特性.事实上也不算新啦,试试吧,如今静态类的继承非常方便了 <?php class A { protected static $def = '123456'; public st ...

  6. 安卓APP载入HTML5页面解决方式总结

    因为H5页面在移动端的兼容性及扩展性方面体现出来的优势,又兼得APP中植入H5页面相应用的灵活性有大大的提升(如活动.游戏的更新等).APP开发不可避免的须要载入一些H5页面.但安卓client对网页 ...

  7. java中的system.out.println()和JSP中out.println()差别

    out.println()输出到client.     在out.println()中,out是response的实例.是以response为对象进行流输出的,即将内容输出到client.假设在JSP ...

  8. 千万别相信鲁大师的硬件測温柔CPU測温功能!!

    非常多人本来随手安装的一个软件. 相信也信任得过它 . 这下让我測试对它失望了.没想到鲁大师这个測温功能实在太搓了!! 白白浪费了我一晚上,  搞来了硅胶 ,弄了几遍  , 还是一样, 还以为买了水货 ...

  9. m_Orchestrate learning system---十五、如何快速查错

    m_Orchestrate learning system---十五.如何快速查错 一.总结 一句话总结: a.删除代码法 b.添加提示代码法 c.仔细看错误信息 1.评论板块和论坛板块的实时更新? ...

  10. linux操作系统下完全删除oracle数据库

    1.关掉oracle server 和 background processes ps -ef | grep ora 关掉数据库 shutdown immediate 2.关掉监听 lsnrctl  ...