美好的一天,抱歉,我只是JNI的一个菜鸟,如果这是一个相当愚蠢的问题,请耐心等待:D now现在使用JNI从C ++调用java类中的方法,你可以这样做:
Java类:
public int getCount() {
return mCount;
}
JNI:
JNIEXPORT void JNICALL
Java_com_example_init(JNIEnv* env, jobject obj, jint number)
{
...
jclass Class = env->GetObjectClass(obj);
jmethodID getCountMethodID = env->GetMethodID(Class,
"getCount", "()I");
if (getCountMethodID == 0)
{
LOG("Function getCount() not found.");
return;
}
Count = env->CallIntMethod(obj, getCountMethodID);
...
}
但是你如何直接从java类中获取实例变量?似乎无法为此找到一个例子。还是非常直截了当?
答案 0 :(得分:2)
您可以参考JNI文档了解更多详情http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp16536。
使用以下方法
从jclass获取所需实例变量的jfieldID jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
获得jfieldID后,您可以使用以下方法访问对象实例变量。但您需要事先知道要访问的字段类型。
NativeType Get<type>Field(JNIEnv *env, jobject obj,
jfieldID fieldID);
答案 1 :(得分:0)
您使用GetFieldID()
获取字段ID;如果您要多次执行此操作或在多个对象上执行此操作,请务必缓存该字段ID,而不是每次都查找它。然后,使用Get<type>Field()
函数获取字段的值:
jfieldID field = env->GetFieldID(Class, "myCount", "I"); // "I" = int field
if (field == NULL)
/* Handle error */;
jint myCount = env->GetIntField(obj, field);
// Use field value...