В JNI настройка и получение элементов из jobjectArray

#android #java-native-interface

#Android #java-native-интерфейс

Вопрос:

 jstring ret_str = (*env)->NewStringUTF(env, output);
(*env)->SetObjectArrayElement(env,result,1,ret_str);

jint bit_count = 5;
(*env)->SetObjectArrayElement(env,result,0,(jobject)bit_count);
 

Последняя строка выдает ошибку FATAL ERROR.

Вот output так char* и result есть jobjectArray .

Все, что мне нужно, это добавить строки, целые числа, числа с плавающей запятой и т. Д. В jobjectArray и захотеть вернуть jobjectArray.

Когда я добавляю jstring, у них нет ошибки, но для другого примитивного типа возникает ошибка.

Ответ №1:

Вы не можете привести jint к jobject, как в Java. C понятия не имеет, как продвигать этот тип данных. Вам нужно будет найти java.lang.Целочисленный класс в JNI и создайте его с помощью аргумента jint, чтобы получить целочисленный jobject.

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

 jclass Integer_class = (*env)->FindClass(env, "java/lang/Integer");
jmethodID = Integer_init = (*env)->GetMethodID(
                env,
                Integer_class,
                "<init>",
                "(I)V");
Integer_object = (*env)->NewObject(
                env,
                Integer_class,
                Integer_init,
                bit_count);