在JNI方法上返回一个String数组

我需要从C ++获取一个字符串列表(char *)并将其返回给Java。

我怎样才能做到这一点?

我认为一个解决方案是返回一个预先定义的大字符串,如:“[item1] [item2]”并在Java上进行拆分,但它看起来不像正确的方法。

  • 如何从android中的字符串数组中获取随机值?
  • 在Android中转义多个“%”字符
  • Arrayadapter.getcount null point exception
  • 从byteArray显示图像
  • Android ArrayAdapter.Add方法不起作用
  • Android字符串数组到Array
  • 如何在android中解析JSONArray
  • 将jsonarray从1个活动传递给另一个活动
  • 查看NewObjectArray到JNI文档中。

    基本上,您可以从JNI函数返回一个String Of String(Java),然后将其转换为List或任何types的Collectiontypes。

    Peudo代码:

    Java的:

     .... public List getFooAsList(){ return new ArrayList(this.getData()); } private native String[] getData(); 

    JNI

     #include  JNIEXPORT jobjectArray JNICALL como_foo_bar_getData (JNIEnv *env, jobject jobj){ jobjectArray ret; int i; char *data[5]= {"A", "B", "C", "D", "E"}; ret= (jobjectArray)env->NewObjectArray(5,env->FindClass("java/lang/String"),env->NewStringUTF("")); for(i=0;i<5;i++) env->SetObjectArrayElement(ret,i,env->NewStringUTF(data[i])); return(ret); } 

    没测试!!!

    如果它适用于你,请告诉我

    问候

     ret= (jobjectArray)env->NewObjectArray(5,env->FindClass("java/lang/String"),env->NewStringUTF("")); 

    我认为初始元素初始化为“”(空字符串)

     env->NewStringUTF("") 

    不需要,因为你刚刚在数组元素之后为其分配一个新值:

     for(i=0;i<5;i++) env->SetObjectArrayElement(ret,i,env->NewStringUTF(data[i])); 

    在这种情况下,一个简单的“NULL”就足够了,因为一旦执行下一行,指定的初始元素就可以进行垃圾收集。 这就像在Java代码中编写以下内容:

     int i = 0; i = 1; 

    或者更糟:

     Object object = new BigObjectVeryHeavyToInitialize(); object = new AnotherObject(); 

    您最喜欢的IDE会向您发出一点警告。