Java 类内类的JNI-GetObjectField失败

Java 类内类的JNI-GetObjectField失败,java,android,java-native-interface,Java,Android,Java Native Interface,我正在尝试访问Java对象中的Java对象。我已经看过了,但我的应用程序在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

我正在尝试访问Java对象中的Java对象。我已经看过了,但我的应用程序在
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>
子对象

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
}

似乎您在上次调用时使用了错误的参数。
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);
}

JNI调用
ReadJavaObject
?@SimonMarquis-你是什么意思?我指的是你实际调用
xyz.ReadJavaObject(…)
的代码,但无论如何,我已经添加了解决方案;)这里没有错误检查。您不能像这样编写JNI代码。您必须检查每个JNIAPI调用的结果。