,請原諒我,我kindof新的C++ JNI環境正確的JNI轉換,從jobjectarray越來越陣列項目單獨爲const char
我想傳遞一個String []數組從Java通過JNI橋到C++而下面的提示我發現這裏給這個片斷:
void MyJNIFunction(JNIEnv *env, jobject object, jobjectArray stringArray) {
int stringCount = env->GetArrayLength(stringArray);
for (int i=0; i<stringCount; i++) {
jstring string = (jstring) (env->GetObjectArrayElement(stringArray, i));
const char *rawString = env->GetStringUTFChars(string, 0);
// Don't forget to call `ReleaseStringUTFChars` when you're done.
}
}
我已經在我的很多代碼中的方法試過,但我仍然得到來自logcat的一個「猛料打破」錯誤和我的應用程序停止。請看看我的代碼和幫助。提前謝謝你。
我的代碼:
JNIEXPORT void Java_ran_com_FirstActivity_Example(
JNIEnv *javaEnvironment, jobject self, jobjectArray stringArray, jlongArray params) {
// Convert the input jlong array to a regular int array.
jlong *longParams = javaEnvironment->GetLongArrayElements(params, JNI_FALSE);
int arr[6];
for (int n = 0; n < 6; n++) arr[n] = longParams[n];
javaEnvironment->ReleaseLongArrayElements(params, longParams, JNI_ABORT);
int stringCount = javaEnvironment->GetArrayLength(stringArray);
for (int i=0; i<stringCount; i++) {
jstring string = (jstring) (javaEnvironment->GetObjectArrayElement(stringArray, 2));
const char *rawString = javaEnvironment->GetStringUTFChars(string, 0);
// a method I created
example = new Example(rawString, arr);
javaEnvironment->ReleaseStringUTFChars(string, rawString);
}
}
jobjectArray和jlongArray傳遞正確實現。您看到錯誤的原因不在代碼中顯示的問題中。錯誤可能是 - 共享庫路徑不正確。 Java_ran_com_FirstActivity_Example沒有用extern「C」聲明,jlongArray有少於6個元素,jobjectArray在索引2處不包含字符串... –