android c 对象为空,ndk-jni中C/C++接口函数修改函数参数jobject对象成员值(数组)的有关问题...
ndk-jni中C/C++接口函數(shù)修改函數(shù)參數(shù)jobject對(duì)象成員值(數(shù)組)的問(wèn)題
現(xiàn)java中有個(gè)類:
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;
}
}
//調(diào)用:
TestClass?testObj=new?TestClass(33,"abc123");
funTest(testObj);
在一個(gè)jni?C函數(shù)接口中該類對(duì)象作為參數(shù)傳入底層,底層C代碼需要修改該對(duì)象的相關(guān)成員,對(duì)于int和String類型的成員都好辦:
void?Java_com_xxx_yyy_TestActivity_funTest(JNIEnv*?env,?jobject?thiz,jobject?obj)
{
jclass?objClass?=?env->GetObjectClass(obj);
if(objClass)
{
//獲取相關(guān)數(shù)據(jù);
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);
//設(shè)置相關(guān)數(shù)據(jù)
jstring?str?=?env->NewStringUTF("qweABC123xxXXXX");
env->SetObjectField(obj,strID,str);
env->SetIntField(obj,intID,222);
//如何設(shè)置nArr呢?
}
}
但是對(duì)于那個(gè)int[]?nArr數(shù)組怎么弄啊,比如我要回寫nArr的值為?1234567(nArr[0]=1,nArr[1]=2,nArr[2]=3.....)
------解決思路----------------------
int[]??在JNI?中對(duì)應(yīng)的是?jintArray
jfieldID?intlist?=?env->GetFieldID(objClass,"nArr","I[");
jintArray?nValue?=?(int)env->GetIntField(obj,intlist);
------解決思路----------------------
jintArray
------解決思路----------------------
說(shuō)錯(cuò)了??jintArray?nValue?=?(int)env->GetIntField(obj,intlist);
改為:?jintArray?nValue?=?(int)env->GetOjectField(obj,intlist);
總結(jié)
以上是生活随笔為你收集整理的android c 对象为空,ndk-jni中C/C++接口函数修改函数参数jobject对象成员值(数组)的有关问题...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 图像拼接c语言,安卓上实现图像拼接(JN
- 下一篇: protocol buffers使用说明