jint result_size;
jfieldID fid;
jobject jobj;
jclass cls;
jmethodID mArrayList_size;
jmethodID mArrayList_get;
jmethodID mString;
cls = (*env)->GetObjectClass (env, urllist);
mArrayList_size = (*env)->GetMethodID (env, cls, "size", "()I");
mArrayList_get = (*env)->GetMethodID (env, cls, "get", "(I)Ljava/lang/Object;");
result_size = (*env)->CallIntMethod(env,urllist,mArrayList_size);
int i ;
str = (char**)malloc (sizeof(char*)*result_size);
for (i = 0 ; i < result_size ; i++) {
jstring jstr;
jstr = (*env)->CallObjectMethod(env,urllist,mArrayList_get,i);
if (NULL != jstr) {
*(str+i) = (*env)->GetStringUTFChars (env, jstr, NULL);
}
}
// use str
//..........
//release jstr
for (i = 0 ; i < result_size ; i++){
jstring jstr;
jstr = (*env)->CallObjectMethod(env,urllist,mArrayList_get,i);
(*env)->ReleaseStringUTFChars (env, jstr, *(str+i));
}
free(str);
对于如何释放jsting,觉得这样效率不高,还没有找到好的办法。
经过测试,result_size 过大(max 512),VM会溢出。