在JNI中查找实例变量的值



以下代码显示了位于"Test"类中的方法的结构,我需要访问布尔变量"Test_var"的值。

public Decision declare(){
 class Decide extends Decision{
       public boolean test_var = false;
 }
 final Decide  d = new Decide();
 d.Add(new Rule("decision")){
  public void take(){
    d.test_var = true;
    }
  });
  return d;
}

我在JNI中尝试了以下操作,但当试图通过GetObjectField查找布尔值时,android应用程序崩溃。

    jclass decision_class = (*env)->FindClass(env, "Test$1Decision");
jfieldID varID = (*env)->GetFieldID(env, decision_class, "test_var", "Z");
if(NULL == varID) log("varID not foundn")
else log("varID was found!!!n")
//jboolean result = (*env)->GetBooleanField(env, obj, varID);
jboolean result = (*env)->GetObjectField(env, obj, varID);
log("In C the boolean value is:", result)

我是否以错误的方式访问字段?任何建议都将不胜感激。提前谢谢。

我建议你看看我的代码

cjv.f_id      = (*cjv.env)->GetStaticFieldID(cjv.env, cjv.clazz, "UiMenu", "Z");
cjv.f_boolean = (*cjv.env)->GetStaticBooleanField(cjv.env, cjv.clazz, cjv.f_id);

在我的情况下,我需要它是静态的,但你应该有一个想法,而不是obj,你应该尝试布尔字段。

最新更新