i return array of strings c java using jni. saw use newobjectarray()
way:
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; ... }
but here, don't know int size
parameter: don't know number of strings i'll use populate array. there way create jobjectarray without knowing in advance size of array?
something creating empty array , adding jobject 1 one array?
edit : solution using arraylist edwin suggested
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;
then in loop create jobject obj
each new object need add arraylist:
jboolean jbool = (*jenv)->callbooleanmethod(jenv, objarr, mid_add, obj); if (jbool == null) return null;
if want have backing store (the array) grow add it, use java.util.arraylist
. might mean few more jni calls (to set object), in case sounds it's worth effort.
Comments
Post a Comment