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

时间:2013-06-11 07:35:36

标签: android java-native-interface

我正在尝试访问" int" C ++中Java类的字段;其实我也试过其他类型。我可以调用方法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!

这是我在C ++代码执行后得到的

view = 0x40521b80 
ClassMYView = 0x40521a70 
f = 0x444727e4
i = 4390958 // supposed to be 555!

请有经验的人,我做错了什么? 谢谢。

1 个答案:

答案 0 :(得分:11)

也许你想写

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是相同的类型。