Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用C+;从Java对象读取整数字段+;(JNI)_Android_Java Native Interface - Fatal编程技术网

Android 使用C+;从Java对象读取整数字段+;(JNI)

Android 使用C+;从Java对象读取整数字段+;(JNI),android,java-native-interface,Android,Java Native Interface,我试图从C++中访问java类中的“int”字段;其实我也试过其他类型的。不过我可以调用方法OK。但不是访问字段。我得到的是随机垃圾值,而不是我期望的值 以下是我的Java代码: private class MYView extends View { public MYView(Context context) { super(context); five = 555; } public int five; .... } C++部分: jobject view = (jobj

我试图从C++中访问java类中的“int”字段;其实我也试过其他类型的。不过我可以调用方法OK。但不是访问字段。我得到的是随机垃圾值,而不是我期望的值

以下是我的Java代码:

private class MYView extends View {
    public MYView(Context context) { super(context);  five = 555; }
    public int five;
....
}
C++部分:

jobject view = (jobject) Env->CallObjectMethod(Obj, jfindViewById, 3);
ClassMYView = Env->GetObjectClass(view);
jfieldID f = Env->GetFieldID(ClassMYView, "five", "I");
int i = Env->GetIntField(ClassMYView, f); <-- error is here, class is not object!
请任何有经验的人,我做错了什么??
谢谢。

也许你想写信

jobject obj = (jobject) Env->CallObjectMethod(Obj, jfindViewById, 3);
ClassMYView = Env->GetObjectClass(obj);
jfieldID f = Env->GetFieldID(ClassMYView, "five", "I");
int i = Env->GetIntField(obj, f);

编译器不会给您错误,因为jobject和jclass基本上是同一类型。

可以找到
GetFieldID
的类型签名-部分类型签名
jobject obj = (jobject) Env->CallObjectMethod(Obj, jfindViewById, 3);
ClassMYView = Env->GetObjectClass(obj);
jfieldID f = Env->GetFieldID(ClassMYView, "five", "I");
int i = Env->GetIntField(obj, f);