c - JNI : create an jobjectArray without knowing the size in advance -


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