错误:(289,23)C ++ / JNI / NDK - 错误:无法使用类型为'jstring'(又名'_jstring *')的左值初始化'char *'类型的参数

时间:2015-07-09 12:12:31

标签: android c++ android-ndk java-native-interface syntax-error

我在使用C ++ / Android(JNI)时遇到错误,我绝对不知道如何修复它。(我对C ++很新)

  

错误:(289,23)错误:无法使用类型为'jstring'(又名'_jstring *')的左值初始化'char *'类型的参数

此行的错误点

JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength) {
    example->LoadPlayerA(audioPath, offsetAndLength);
}

在我的课堂宣言中我有:

public: void LoadPlayerA(char *audioPath, int *params);android

有人可以告诉我,我错在哪里吗?

1 个答案:

答案 0 :(得分:1)

错误非常自我解释。在example->LoadPlayerA(audioPath, offsetAndLength);中,audioPath的类型为jstring,但在LoadPlayerA()函数中,第一个参数为char *audioPath。编译器不知道如何将jstring转换为char*,因此您必须自己完成。

借用Jason Rogers回复here,您可以将代码更改为:

JNIEXPORT void Java_de_meetspot_ndktest_MainActivity_LoadPlayerA(JNIEnv *javaEnvironment, jobject self, jstring audioPath, jlongArray offsetAndLength)
{
    const char* audio = javaEnvironment->GetStringUTFChars(audioPath, JNI_FALSE)
    example->LoadPlayerA(audio, offsetAndLength);
    javaEnvironment->ReleaseStringUTFChars(audioPath, audio);
}

修改

我忘了包含Release()功能。完成数组后需要调用它,否则会有内存泄漏。