Dar*_*rov 5 java java-native-interface android android-ndk
我正在尝试EXTRA_ADDRESS_BOOK_INDEX使用JNI 访问常量:
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);
}
Run Code Online (Sandbox Code Playgroud)
该GetStaticObjectField方法崩溃并显示错误:
java_vm_ext.cc:534]应用程序中JNI检测到错误:静态jfieldID 0x6fd191b0对类java.lang.Class <android.provider.ContactsContract $ Data>无效
另一方面,如果我尝试访问VISIBLE_CONTACTS_ONLY同一类的字段,那么一切都会按预期进行:
jfieldID fieldID = env->GetStaticFieldID(clazz, "VISIBLE_CONTACTS_ONLY", "Ljava/lang/String;");
Run Code Online (Sandbox Code Playgroud)
任何提示我可能做错了什么?
所以我尝试解决它并得到相同的错误,然后我搜索了最终类ContactsContract的源代码,发现该字段EXTRA_ADDRESS_BOOK_INDEX不是在嵌套类Data中声明的,而是在名为ContactCounts的嵌套接口中声明的。
所以解决方案是替换"android/provider/ContactsContract$Data"为"android/provider/ContactsContract$ContactCounts"
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |