尝试访问EXTRA_ADDRESS_BOOK_INDEX字段时出现JNI错误

时间:2018-05-25 07:47:16

标签: java android android-ndk java-native-interface

我正在尝试使用JNI访问EXTRA_ADDRESS_BOOK_INDEX常量:

JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
    JNIEnv* env = nullptr;
    vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
    jclass clazz = env->FindClass("android/provider/ContactsContract$Data");
    jfieldID fieldID = env->GetStaticFieldID(clazz, "EXTRA_ADDRESS_BOOK_INDEX", "Ljava/lang/String;");
    jobject field = env->GetStaticObjectField(clazz, fieldID);
}

GetStaticObjectField方法因错误而崩溃:

  

java_vm_ext.cc:534]应用程序中的JNI检测错误:静态jfieldID   0x6fd191b0对类无效   的java.lang.Class&LT; android.provider.ContactsContract $数据与GT;

另一方面,如果我尝试访问同一个班级的VISIBLE_CONTACTS_ONLY字段,一切都按预期工作:

jfieldID fieldID = env->GetStaticFieldID(clazz, "VISIBLE_CONTACTS_ONLY", "Ljava/lang/String;");

我可能做错了什么线索?

1 个答案:

答案 0 :(得分:3)

所以我尝试解决它并得到相同的错误,然后我搜索了最终类ContactsContract的源代码,发现字段EXTRA_ADDRESS_BOOK_INDEX未在嵌套类中声明数据,但在名为 ContactCounts 的嵌套界面中。

因此,解决方案是将"android/provider/ContactsContract$Data"替换为"android/provider/ContactsContract$ContactCounts"