Nimrod Borochov
Nimrod Borochov

Reputation: 356

JNI - GetObjectField failed for class inside class

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

Answers (1)

Simon Marquis
Simon Marquis

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

Related Questions