jni传递对象中包含arraylist对象。
相信在使用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的对象。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2015-05-08 Android SDK三种更新失败及其解决方法
2015-05-08 Java中集合Set的用法
2015-05-08 Android实现视频录制
2014-05-08 RotateAnimation详解
2014-05-08 你可能没听过的 Java 8 中的 10 个特性
2014-05-08 otg线是什么,otg线和数据线的区别介绍
2014-05-08 JAVA8 十大新特性详解