Devuelve una matriz String en un método JNI

Necesito obtener una lista de cadenas (char *) de C ++ y devolverlo a Java.

¿Cómo puedo hacer eso?

Creo que una solución es devolver una cadena grande predefinida como: "[item1] [item2]" y hacer una división en Java, pero no parece el enfoque correcto.

Mira NewObjectArray en el documento JNI.

Básicamente, puede regresar de la función JNI un Array Of String (Java) y luego transformarlo en una List o cualquier tipo de tipo de colección.

Código Peudo:

Java:

 .... public List<String> getFooAsList(){ return new ArrayList(this.getData()); } private native String[] getData(); 

JNI

 #include <jni.h> JNIEXPORT jobjectArray JNICALL como_foo_bar_getData (JNIEnv *env, jobject jobj){ jobjectArray ret; int i; char *data[5]= {"A", "B", "C", "D", "E"}; ret= (jobjectArray)env->NewObjectArray(5,env->FindClass("java/lang/String"),env->NewStringUTF("")); for(i=0;i<5;i++) env->SetObjectArrayElement(ret,i,env->NewStringUTF(data[i])); return(ret); } 

¡¡¡No probado!!!

Avísame si funciona para ti

Saludos

 ret= (jobjectArray)env->NewObjectArray(5,env->FindClass("java/lang/String"),env->NewStringUTF("")); 

Creo que el elemento inicial inicializado a "" (cadena vacía)

 env->NewStringUTF("") 

No es necesario, ya que asigna un nuevo valor al elemento de matriz justo después de:

 for(i=0;i<5;i++) env->SetObjectArrayElement(ret,i,env->NewStringUTF(data[i])); 

Un simple "NULL" sería suficiente en este caso, ya que el elemento inicial especificado será electable para recolección de basura tan pronto como se ejecuta la siguiente línea. Es como escribir lo siguiente en código Java:

 int i = 0; i = 1; 

O peor:

 Object object = new BigObjectVeryHeavyToInitialize(); object = new AnotherObject(); 

Su IDE favorito le daría una pequeña advertencia para eso.

  • Android ndk: Problema para la llamada del método Java desde c ++ con jni
  • Ciclo de vida de actividad de Android y ciclo de código nativo de JNI
  • Android ffmpeg .so descargar
  • Temporizador de alta precisión en Android JNI
  • FindClass de cualquier hilo en Android JNI
  • Utilizar Qt / C ++ para llamar al código Java a través de JNI. FindClass no encuentra clase
  • Es una pérdida de una sola vez de referencia a la memoria nativa asignada por una aplicación Android un gran negocio?
  • Cómo llamar a un método Java desde C ++ / JNI que toma un parámetro de Contexto de Android
  • No se puede resolver el símbolo webrtc en Android Studio
  • Android JNI - Llamar AttachCurrentThread sin DetachCurrentThread
  • ¿Cómo crear un socket Android RFCOMM sin ninguna entrada del usuario?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.