Reputation: 356
I'm trying to access a Java object within a Java object. I've looked at Accessing a Java object in a Java object in C using JNI, but my app still gets an error in GetObjectField
.
The error is:
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>
My code is:
MainObject
package my.package.name;
public class MainObject {
SubObject subObject= new SubObject();
}
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
}
Upvotes: 1
Views: 4105
Reputation: 7516
It seems you simply used the wrong parameter on the last call.
GetObjectField
must be used with the root object and the objectId to get.
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);
}
Upvotes: 2