2015-08-09 66 views
1

我试图访问Java对象内的Java对象。我看过Accessing a Java object in a Java object in C using JNI,但我的应用在GetObjectField中仍然出现错误。JNI - GetObjectField类中的类失败

的错误是:

sart/tuntime/check_jni:.cc65] JNI DETECTED ERROR IN APPLICATION: 
jfieldID my.package.name.SubObject my.package.name.MainObject.subObject 
not valid for an object of class java.lang.Class<my.package.name.MainObject> 

我的代码是:

MainObject

package my.package.name; 
public class MainObject { 
    SubObject subObject= new SubObject(); 
} 

子对象

package my.package.name; 
public class SubObject { 
    String name; 
} 

JNI

void ReadJavaObject(JNIEnv * env, jobject mainObjectJava) 
{ 
    jclass cls = env->GetObjectClass(mainObjectJava); 
    jfieldID subObjectID = env->GetFieldID(cls, "subObject", "Lmy/package/name/SubObject;"); 
    jobject subObjectJava= env->GetObjectField(cls, subObjectID); 
//...Do something with subObjectJava 
} 
+0

JNI调用'ReadJavaObject'在哪里? –

+0

@SimonMarquis - 你是什么意思? –

+0

我在引用代码,你实际上调用'xyz.ReadJavaObject(...)',但从来不知道,我已经添加了解决方案;) –

回答

1

看来你只是使用了错误的参数上的最后一次通话。 GetObjectField必须与根对象和objectId一起使用才能获得。

void ReadJavaObject(JNIEnv * env, jobject mainObjectJava) 
{ 
    jclass cls = env->GetObjectClass(mainObjectJava); 
    jfieldID subObjectID = env->GetFieldID(cls, "subObject", "Lmy/package/name/SubObject;"); 
    jobject subObjectJava= env->GetObjectField(mainObjectJava, subObjectID); 
}