Android JNI开发(4)--访问Java的实例变量和静态变量
来源:互联网 发布:在淘宝刷好评犯法吗 编辑:程序博客网 时间:2024/06/05 03:26
啥都不说了,上代码:
/* * 访问Java实例变量的值 */ JNIEXPORT void accessInstanceField (JNIEnv *env, jclass cls, jobject obj) { jclass clazz; jfieldID fid; jstring j_str; jstring j_newStr; const char *c_str = NULL; // 1.获取AccessField类的Class引用 clazz = (*env)->GetObjectClass(env,obj); if (clazz == NULL) { return; } // 2. 获取AccessField类实例变量名为str的属性ID ,类型为String类型 fid = (*env)->GetFieldID(env,clazz,"str", "Ljava/lang/String;"); if (clazz == NULL) { return; } // 3. 获取实例变量str的值 j_str = (jstring)(*env)->GetObjectField(env,obj,fid); // 4. 将unicode编码的java字符串转换成C风格字符串 c_str = (*env)->GetStringUTFChars(env,j_str,NULL); if (c_str == NULL) { return; } printf("In C--->ClassField.str = %s\n", c_str); (*env)->ReleaseStringUTFChars(env, j_str, c_str); // 5. 修改实例变量str的值 j_newStr = (*env)->NewStringUTF(env, "This is C String"); if (j_newStr == NULL) { return; } (*env)->SetObjectField(env, obj, fid, j_newStr); // 6.删除局部引用 (*env)->DeleteLocalRef(env, clazz); (*env)->DeleteLocalRef(env, j_str); (*env)->DeleteLocalRef(env, j_newStr); } /* * Class: com_study_jnilearn_AccessField * Method: accessStaticField * Signature: ()V */ JNIEXPORT void JNICALL Java_com_study_jnilearn_AccessField_accessStaticField (JNIEnv *env, jclass cls) { jclass clazz; jfieldID fid; jint num; //1.获取ClassField类的Class引用 clazz = (*env)->FindClass(env,"com/xxxx/ClassField"); if (clazz == NULL) { // 错误处理 return; } //2.获取ClassField类静态变量num的属性ID fid = (*env)->GetStaticFieldID(env, clazz, "num", "I"); if (fid == NULL) { return; } // 3.获取静态变量num的值 num = (*env)->GetStaticIntField(env,clazz,fid); printf("In C--->ClassField.num = %d\n", num); // 4.修改静态变量num的值 (*env)->SetStaticIntField(env, clazz, fid, 80); // 删除属部引用 (*env)->DeleteLocalRef(env,clazz); }
阅读全文
0 0
- Android JNI开发(4)--访问Java的实例变量和静态变量
- JNI/NDK开发指南(六)--C/C++访问Java实例变量和静态变量
- (JNI)C/C++ 访问 Java 实例变量和静态变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量
- Java 的静态变量和实例变量
- C/C++ 访问 Java 实例变量和静态变量
- java基础 4、静态变量和实例变量的区别
- java静态变量(类变量)和普通变量(实例变量)的区别
- Java实例说明 静态变量和实例变量的区别
- Java中静态变量和实例变量的区别?&和&&
- Java中静态变量和实例变量的区别?&和&&
- 静态变量和非静态(实例)变量的区别
- JAVA中的实例变量和静态变量
- Java类的静态变量和实例变量
- java中的静态变量和实例变量的生命周期
- IO
- node部署到linux服务器
- windows下vim中文乱码的解决方法
- Effective Java(什么是clone、什么是“深拷贝”和“浅拷贝”)
- DAO层
- Android JNI开发(4)--访问Java的实例变量和静态变量
- HDU 1815 Building roads(二分+2-SAT)
- Android 调用系统剪裁工具剪裁用户头像
- Web 解决nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed错误
- js截取字符串长度,超出的用省略号代替
- Another MySQL daemon already running with the same unix socket.
- html入门知识点(一)
- 2017-09-20开启博客征程
- 自练题20170726