Передача объекта класса в качестве параметра - PullRequest
3 голосов
/ 25 июля 2011

У меня есть класс, у которого есть объект другого класса. Когда я передаю этот объект моей функции jni через jobject, getFieldID говорит, что не может найти поле. Имя переменной определенно верно

jfieldID fidPopulation = (*env)->GetFieldID(env,cls,"mPopulation","I");

1 Ответ

0 голосов
/ 02 августа 2011

В этой функции вы пытаетесь получить доступ к полю целочисленного типа с именем mPopulation. Из вашего вопроса похоже, что вы пытаетесь получить доступ к полю объекта. «Я» означает, что это целое число. если вы пытаетесь получить какой-либо объект, вы должны указать его пути что-то вроде «org / abc / MyClass»
Я добавляю код согласно комментариям ниже.
objectA передается JVM и является объектом, вызывающим эту функцию. objectB является параметром и является объектом класса org / demopath / ClassB.java и передается в тестовую функцию из java.

    Java_MyTestFunction( JNIEnv *env, jobject objectA, jobject objectB) {  
        jclass cls = (*env)->FindClass(env, "org/demopath/ClassB");  
        jfieldID fid = (*env)->GetFieldID(env, cls, "mPopulation ", "I");  
        jint population = (*env)->GetIntField(env, objectB, fid);  
    }      

Я вручную закодировал подпись, поэтому могут быть некоторые ошибки. Всегда используйте сгенерированную подпись

...