14
我想使用JNI从C到Java返回一个字符串数组。 我看到了,我可以用NewObjectArray()
这样:JNI:在事先不知道大小的情况下创建jobjectArray
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;
...
}
但在这里,我不知道int size
参数:我不知道的字符串,我会用它来填充我的阵列的数量。那么有没有办法在事先不知道数组大小的情况下创建jobjectArray?
就像创建一个空数组,然后将jobject一个接一个添加到该数组?
EDIT:溶液使用一个ArrayList作为埃德建议
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;
然后在一个循环我为每个新对象我需要添加到ArrayList创建jobject obj
:
jboolean jbool = (*jenv)->CallBooleanMethod(jenv, objArr, mid_add, obj);
if (jbool == NULL) return NULL;
没错。我会在星期一看看它。 – leochab 2011-04-29 15:35:07