Ошибка JNI при попытке доступа к полю EXTRA_ADDRESS_BOOK_INDEX - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь получить доступ к константе 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);
}

Метод GetStaticObjectField завершается с ошибкой:

java_vm_ext.cc:534] JNI ОБНАРУЖИЛА ОШИБКУ ПРИЛОЖЕНИЯ: статический jfieldID 0x6fd191b0 недопустим для класса java.lang.Class

С другой стороны, если я пытаюсь получить доступ к полю VISIBLE_CONTACTS_ONLY в том же классе, все работает как положено:

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

Любые подсказкичто я могу делать не так?

1 Ответ

0 голосов
/ 25 мая 2018

Поэтому я попытался решить ее и получить ту же ошибку, затем я искал исходный код конечного класса ContactsContract и обнаружил, что поле EXTRA_ADDRESS_BOOK_INDEX не объявлено во вложенном классе Данные , но во вложенном интерфейсе, называемом ContactCounts .

Таким образом, решение заключается в замене "android/provider/ContactsContract$Data" на "android/provider/ContactsContract$ContactCounts"

...