Me gustaría devolver una matriz de cadenas de C a Java utilizando JNI. vi que podía usar NewObjectArray()
esta manera:JNI: cree un workjectArray sin saber el tamaño por adelantado
JNIEXPORT jobjectArray JNICALL Java_Array_initStringArray(JNIEnv *env, jclass cls, jint size)
{
jclass stringCls = (*env)->FindClass(env, "Ljava/lang/String;");
if (stringCls == NULL) return NULL;
jstringArray result = (*env)->NewObjectArray(env, size, StringCls, NULL);
if (result == NULL) return NULL;
...
}
Pero aquí, no sé el parámetro int size
: No sé el número de cuerdas que voy a utilizar para rellenar mi matriz. Entonces, ¿hay alguna manera de crear un objeto de trabajo sin saber de antemano el tamaño de la matriz?
¿Algo así como crear una matriz vacía y luego agregar jobject uno por uno a esa matriz?
EDITAR: solución utilizando un ArrayList como Edwin sugirió
jclass arrayClass = (*jenv)->FindClass(jenv, "java/util/ArrayList");
if (arrayClass == NULL) return NULL;
jmethodID mid_init = (*jenv)->GetMethodID(jenv, arrayClass, "<init>", "()V");
if (mid_init == NULL) return NULL;
jobject objArr = (*jenv)->NewObject(jenv, arrayClass, mid_init));
if (objArr == NULL) return NULL;
mid_add = (*jenv)->GetMethodID(jenv, arrayClass, "add", "(Ljava/lang/Object;)Z");
if (mid_add == NULL) return NULL;
Luego, en un bucle que crea una jobject obj
para cada nuevo objeto que necesito para añadir a la arrayList:
jboolean jbool = (*jenv)->CallBooleanMethod(jenv, objArr, mid_add, obj);
if (jbool == NULL) return NULL;
Derecha. Lo echaré un vistazo el lunes. – leochab