Java jFieldId int对对象无效

Java jFieldId int对对象无效,java,android,c++,java-native-interface,Java,Android,C++,Java Native Interface,尝试构建我的第二个jni android应用程序,但遇到了一些问题 这是我的基本示例包 package com.example.angelica.myapplication; public class SomeVars { //load library public int aPrivate; public native void UpdateVars(); } 以及我的jni实现 #include <jni.h> extern "C" JNIE

尝试构建我的第二个jni android应用程序,但遇到了一些问题

这是我的基本示例包

package com.example.angelica.myapplication;


public class SomeVars { 
    //load library

    public int aPrivate;

    public native void UpdateVars();
}
以及我的jni实现

#include <jni.h>

extern "C"
JNIEXPORT void JNICALL
Java_com_example_angelica_myapplication_SomeVars_UpdateVars(JNIEnv *env, jobject instance) {

    // TODO
    jclass  cls = getclass();  
    jfieldID  fid = getField("aPrivate");

    jint i = env->GetIntField(cls,fid);

    i = i + 100;
    env->SetIntField(cls, fid,i);
}
jint i = env->GetIntField(cls,fid);  //Error 1
env->SetIntField(cls, fid,200);      //Error 2
项目生成成功,并且已正确启动。但当点击按钮时,项目异常停止。我试着看看logcat日志。但我无法理解错误背后的原因。张贴日志的几行

04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: jfieldID int com.example.angelica.myapplication.SomeVars.aPrivate not valid for an object of class java.lang.Class<com.example.angelica.myapplication.SomeVars>
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470]     in call to GetIntField
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470]     from void com.example.angelica.myapplication.SomeVars.UpdateVars()
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470] "main" prio=5 tid=1 Runnable
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470]   | group="main" sCount=0 dsCount=0 obj=0x7449df60 self=0xa968b400
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470]   | sysTid=3949 nice=-10 cgrp=default sched=0/0 handle=0xada11534
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470]   | state=R schedstat=( 0 0 0 ) utm=4 stm=18 core=1 HZ=100
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470]   | stack=0xbf5fe000-0xbf600000 stackSize=8MB
04-16 13:34:56.171 3949-3949/com.example.angelica.myapplication A/art: art/runtime/java_vm_ext.cc:470]   | held mutexes= "mutator lock"(shared held)

如果我对这两行进行注释,则不会发生错误。

我在设置SetIntField时犯了一个小错误,应该使用实例设置字段

env->SetIntField(cls, fid,200);      //Error 
env->SetIntField(instance, fid, 200); //SOLVED 

现在一切正常了

我在设置SetIntField时犯了点错误,应该是使用实例设置字段

env->SetIntField(cls, fid,200);      //Error 
env->SetIntField(instance, fid, 200); //SOLVED 

现在一切正常了

你能解释一下为什么会出错吗?你能解释一下为什么会出错吗?