android NDK 实用学习-java端对象成员赋值和获取对象成员值

1,关于java端类及接口定义请参考:

  android NDK 实用学习-获取java端类及其类变量

2,对传过来的参数进行赋值:

  • 对bool类型成员进行赋值

     env->SetBooleanField(jobj, jfbdata, false);

  • 对double类型成员进行赋值

env->SetDoubleField(jobj, jfddata, 209.22);

  • 对int类型成员进行赋值

env->SetIntField(jobj, jfidata, 3653);

  • 对byte类型成员进行赋值

env->SetByteField(jobj, jfcdata, 67);

  • 对String类型进行赋值

char data[10] = "4611354"; env->SetObjectField(jobj, jfsdata, env->NewStringUTF(data));

  • 对基本类型数组类型进行赋值
 1    // 获取Java中Int数组赋值
 2     jintArray jint_arr = (jintArray)env->GetObjectField(jobj, jiarr);
 3     int arrInt[10] = {0};
 4     for(int i = 0; i < 10; ++i){
 5        arrInt[i] = 220+i;
 6     }
 7     env->SetIntArrayRegion(jint_arr, 0, 10, arrInt);
 8
 9     // 获取Java中byte数组赋值
10     jfieldID jbyteArr = env->GetFieldID(jcSetDataMgr, "byteArr", "[B");
11      char arrByte[10] = "20200825";
12      jbyteArray jbyte_arr = (jbyteArray)env->GetObjectField(jobj, jbyteArr);
13     env->SetByteArrayRegion(jbyte_arr, 0, 8, (const signed char*)arrByte);

3,获取成员变量值:

  • 获取bool类型成员变量值
bool bData = env->GetBooleanField(jcSetDataMgr, jfbdata);
  • 获取double类型成员变量值
double dData = env->GetDoubleField(jcSetDataMgr, jfddata);
  • 获取int类型成员变量值
int iData = env->GetIntField(jcSetDataMgr, jfidata);
  • 获取byte类型成员变量值
char cData = env->GetByteField(jcSetDataMgr, jfcdata);
  • 获取String成员变量值
1 jfieldID jfsdata = env->GetFieldID(jcSetDataMgr, "sData", "Ljava/lang/String;");
2 jstring jtestStr = (jstring)(env->GetObjectField(jcSetDataMgr, jfsdata));
3 const char* testStr = env->GetStringUTFChars(jtestStr, NULL);
4 char testData[100] = {0};
5 strcpy(testData, testStr);
6 env->ReleaseStringUTFChars(jtestStr, testStr);
  • 获取基本类型数组成员变量值
 1     jfieldID jiarr = env->GetFieldID(jcSetDataMgr, "intArr", "[I");
 2     if(NULL == jiarr){
 3         DEBUG_OUT("jfbdata fail!");
 4     }
 5
 6     // 获取Java中数组属性arrays的对象
 7     jintArray jint_arr = (jintArray)env->GetObjectField(jobj, jiarr);
 8
 9     int arrInt[10] = {0};
10     for(int i = 0; i < 10; ++i){
11        arrInt[i] = 220+i;
12     }
13     env->GetIntArrayRegion(jint_arr, 0, 10, arrInt);

4,关于类中包含类的可以依次类推,如有用到,以后后续完善!

时间: 2024-10-12 22:04:22

android NDK 实用学习-java端对象成员赋值和获取对象成员值的相关文章

android NDK 实用学习(三)- java端类对象的构造及使用

1,读此文章前我假设你已经读过: android NDK 实用学习-获取java端类及其类变量 android NDK 实用学习-java端对象成员赋值和获取对象成员值 2,java端类对象的构造: ①首先获取类; ②获取类的无参构造函数: jmethodID initID = env->GetMethodID(jcSetDataMgr, "<init>", "()V"); ③构造类实例: jobject jresult = env->New

android NDK 实用学习(五)-c++端调用java接口

1,阅读此文章前请阅读前面文章,以免阅读出现障碍: android NDK 实用学习(一)-获取java端类及其类变量 android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值 android NDK 实用学习(三)- java端类对象的构造及使用 android NDK 实用学习(四)-类缓存 2,java端类接口定义: 1 public class RTKNativeManager { 2 // 其他接口 3 4 // 开给c++端的接口 5 public static

android NDK 实用学习-获取java端类及其类变量

近期为android 端项目包装一些c++代码,故学习ndk相关知识,现总结如下: 1,java与c++类型参照图: 2,此测试中使用的java类: 1 package com.dasea.test.core; 2 public class TestSetData { 3 // 主要是类ID和字段ID,方法ID的缓存 4 static { 5 OnNative(); 6 } 7 8 public native static void OnNative(); 9 10 public boolean

android NDK 实用学习(四)-类缓存

1,为什么需要类缓存: 答:由于频繁的查找类及类成员变量需要很大的时间与空间开销,可参考如下文章: http://www.ibm.com/developerworks/cn/java/j-jni/ http://www.28im.com/java/a2379737.html 2,缓存时需要在java类使用static,如下: 1 package com.dasea.test.core; 2 public class TestSetData { 3 // 主要是类ID和字段ID,方法ID的缓存 4

基于 Android NDK 的学习之旅----- C调用Java

http://www.cnblogs.com/luxiaofeng54/archive/2011/08/17/2142000.html 基于 Android NDK 的学习之旅----- C调用Java许多成熟的C引擎要移植到Android 平台上使用 , 一般都会 提供 一些接口, 让Android sdk 和 jdk 实现. 下文将会介绍 C 如何 通过 JNI 层调用 Java 的静态和非静态方法. 1.主要流程 1.  新建一个测试类TestProvider.java a)       

【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)

原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码) 基于 Android NDK 的学习之旅-----数据传输(引用数据类型) 接着上篇文章继续讲.主要关于引用类型的数据传输,本文将介绍字符串传输和自定义对象的传输. 1.主要流程 1.  String 字符串传输 a)         上层定义一个native的方法

基于 Android NDK 的学习之旅-----序言

http://www.cnblogs.com/luxiaofeng54/tag/android/default.html?page=1 基于 Android NDK 的学习之旅-----目录 duicky 2011-09-15 16:34 阅读:3035 评论:2 基于 Android NDK 的学习之旅-----资源释放 duicky 2011-08-21 14:29 阅读:6173 评论:0 基于 Android NDK 的学习之旅-----数据传输二(引用数据类型)(附源码) duicky

java反射机制,通过类名获取对象,通过方法名和参数调

try {//得到对象Class c = Class.forName("完整类名");Object yourObj = c.newInstance();//得到方法Method methlist[] = cls.getDeclaredMethods();for (int i = 0; i < methlist.length; i++) {Method m = methlist[i];}//获取到方法对象,假设方法的参数是一个int,method名为setAgeMethod sAg

Android NDK开发(四)——Java传递数据到C

转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处理和从第一个Hello World开始实际做一个简单的JNI开发示例,相信看完之后,大家对NDK开发有了一个概念上的认识了,那么接下来我们需要再深入一下NDK的开发,我们知道NDK开发就是使用JNI这层"协议"在Java和C之间起个"桥梁"的作用,将Java和Nativ