Android 使用C+;从Java对象读取整数字段+;(JNI)
我试图从C++中访问java类中的“int”字段;其实我也试过其他类型的。不过我可以调用方法OK。但不是访问字段。我得到的是随机垃圾值,而不是我期望的值 以下是我的Java代码: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
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);