【问题标题】:How to return string array to java JNI如何将字符串数组返回到java JNI
【发布时间】:2018-09-28 11:29:24
【问题描述】:

我想将 finalResult 数组返回给 java。任何帮助表示赞赏。

extern "C"
JNIEXPORT void JNICALL
Java_com_testjniproject_MainActivity_AnalyseImageDisplay(JNIEnv *env, jobject instance, jlong sourceImageArray)
{
    Mat &srcInputImg = *(Mat*)sourceImageArray;
    vector<tuple<string, string, int>> result = AnalyseImage(srcInputImg);
    enter code here
    string finalResult[3];
    for (int i=0; i < result.size(); i++)
    {
        cout << get<0>(result[i]) << " : " << get<1>(result[i]) << " With confidence " << get<2>(result[i]) << "%" << endl;
        finalResult[i] = get<1>(result[i]);
    }
}

【问题讨论】:

    标签: android c++ opencv java-native-interface native


    【解决方案1】:

    你可以这样做:

    extern "C" {
    JNIEXPORT jobjectArray JNICALL Java_com_testjniproject_MainActivity_AnalyseImageDisplay(
            JNIEnv *env,
            jobject instance,
            jlong sourceImageArray) {
        jobjectArray result;
        result = (jobjectArray)env->NewObjectArray(3,env->FindClass("java/lang/String"),env->NewStringUTF(""));
        for(int i=0; i<3; i++) {
             env->SetObjectArrayElement(result,i,env->NewStringUTF(finalResult[i].c_str()));
        }
        return result;
    }
    }
    

    【讨论】:

    • 您可以传递nullptr 或NULL 作为NewObjectArray 调用的初始值,而不是创建一个虚拟字符串
    • @Bruno 我收到一些错误,如下所示 - 错误:从 'std::__ndk1::string' 没有可行的转换(又名 'basic_string, allocator>' ) 到 'const char *' env->SetObjectArrayElement(fresult,i,env->NewStringUTF(finalResult[i]))
    • 使用std::string的c_str()方法。还要确保您的字符串实际上是 UTF-8 或 ASCII。
    • 我的错,我写我的例子很快。正如@Botje 所说,使用c_str() 方法。我已经编辑了我的答案
    • 虽然我可以成功运行,但我的 JNI 没有返回任何结果。 @Botje 如何将字符串数组转换为 UTF-8?
    猜你喜欢
    • 2019-11-28
    • 2010-12-09
    • 2017-11-30
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多