我正在尝试使用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;");
我可能做错了什么线索?
答案 0 :(得分:3)
所以我尝试解决它并得到相同的错误,然后我搜索了最终类ContactsContract的源代码,发现字段EXTRA_ADDRESS_BOOK_INDEX
未在嵌套类中声明数据,但在名为 ContactCounts 的嵌套界面中。
因此,解决方案是将"android/provider/ContactsContract$Data"
替换为"android/provider/ContactsContract$ContactCounts"