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.

  • ¿Las funciones de Android JNI se ejecutan en el hilo principal?
  • JNI: Pasar varios parámetros en la firma de función para GetMethodID
  • No se pueden cargar archivos de biblioteca .so al hacer una aplicación de sistema
  • Acceder al acelerómetro de jni
  • Javah: Error: no se puede acceder a android.support.v7.app.ActionBarActivity
  • Jni llama al método java que toma una interfaz java personalizada como parámetro
  • JNA para android
  • Invocación de funciones nativas de la biblioteca portada
  • Problema pasando byte a través de jni a C en Android
  • Cómo pasar una estructura como un argumento a la función java o volver a java de jni
  • Ejecutar código en el subproceso principal / UI en Cocos2dx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.