ndk-jni中C/C++接口函数修改函数参数jobject对象成员值(数组)的问题

现java中有个类:

public class TestClass {    private int nValue;    private String strValue;    private int[] nArr=new int[8];    public TestClass(int a, String b) {        super();        this.nValue = a;        this.strValue = b;        for(int i=0;i<8;++i){            nArr[i] = 0;        }    }    public TestClass() {        super();        for(int i=0;i<8;++i){            nArr[i] = 0;        }    }    public int getInt(){        return nValue;    }    public String getStr(){        return strValue;    }}

调用方法:

//调用:TestClass testObj=new TestClass(33,"abc123");funTest(testObj);

在一个jni C函数接口中该类对象作为参数传入底层,底层C代码需要修改该对象的相关成员,对于int和String类型的成员都好办:

C/C++ code:

void Java_com_xxx_yyy_TestActivity_funTest(JNIEnv* env, jobject thiz,jobject obj){    jclass objClass = env->GetObjectClass(obj);    if(objClass)    {        //获取相关数据;        jfieldID intID = env->GetFieldID(objClass,"nValue","I");        jint nValue = (int)env->GetIntField(obj,intID);        jfieldID strID = env->GetFieldID(objClass,"strValue","Ljava/lang/String;");        jstring jstr = (jstring)env->GetObjectField(obj,strID);        const char *pszStr = env->GetStringUTFChars(jstr,NULL);        env->ReleaseStringUTFChars(jstr,pszStr);        //设置相关数据        jstring str = env->NewStringUTF("qweABC123xxXXXX");        env->SetObjectField(obj,strID,str);        env->SetIntField(obj,intID,222);        //如何设置nArr呢?    }}

但是对于那个int[] nArr数组怎么弄啊,比如我要回写nArr的值为 1234567(nArr[0]=1,nArr[1]=2,nArr[2]=3…..)

现在 既可以在上边的 添加方法为:

jfieldID intArrID = env->GetFieldID(objClass,"nArr","[I");jint nArr[8] = {8,7,6,5,4,3,2,1};jintArray jnArray = env->NewIntArray(8);env->SetIntArrayRegion(jnArray,0,8,nArr);env->SetObjectField(obj,intArrID,jnArray);

既可以完成jni修改java层代码.

更多相关文章

  1. Android绘制文本对象FontMetrics介绍及繪製文本
  2. Android 中的 Looper 对象
  3. 关于Android/java的复杂对象的深拷贝和浅拷贝
  4. Android Audio代码分析13 - AudioTrack::getPosition函数
  5. android 使用Intent传递对象 Serializable 或者 Parcelabel 《第
  6. Android 中调试手段 打印函数调用栈信息
  7. Android 利用JNI调用Android Java代码函数

随机推荐

  1. Netty编解码框架分析
  2. java关键字系列(5)super
  3. Ubuntu xx中编译Android(安卓)xx中软件安
  4. SpringBoot系列(1)基础入门
  5. 设计模式之模板方法模式
  6. SpringBoot系列(2)整合MongoDB实现增删改查
  7. 设计模式之桥接模式
  8. java集合系列(5)LinkedList
  9. 面试必问:String类型为什么设计成不可变的
  10. 设计模式之组合模式