JNI访问对象数组出错(错误)

3

我有一个使用C ++库的Android项目,我需要将对象数组发送到C ++代码中。

这是我的Java本地绑定代码:

class MyLib {
    public static native void testArray(String[] array);
}

这是我称之为的方式。
...
MyLib.testArray(new Object[20]);
...

这是我的C++ JNI代码:

JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jobjectArray arr) {
    __android_log_print(ANDROID_LOG_INFO,"test","test array!!!!!!!!");
    int count = env->GetArrayLength(arr);
    __android_log_print(ANDROID_LOG_INFO,"test","array length %d", count);
     for (int i=0; i<count; i++) {
        __android_log_print(ANDROID_LOG_INFO,"test","--- get item %d", i);
        jstring jkey    = (jstring) env->GetObjectArrayElement(arr, i);
        __android_log_print(ANDROID_LOG_INFO,"test","item %d", i);    
        env->DeleteLocalRef(jkey);
    }
}

当我执行此操作时,logcat显示该错误,并以sigsev 11结束。
JNI WARNING: jarray arg has wrong type (expected array, got Ljava/lang/Class;) in Lcom/android/mypackage/MyLib;.testArray:([Ljava/lang/Object;)V (GetArrayLength)

有没有想法为什么我的数组引用看起来像一个类引用?我只有在使用对象的数组时才遇到问题。
1个回答

5

我相信你的函数签名

JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jobjectArray arr)

应该长成这样:
JNIEXPORT void JNICALL Java_com_android_mypackage_MyLib_testArray(JNIEnv * env, jclass clazz, jobjectArray arr)

您缺少第二个参数 - 在静态方法中,该参数始终为Class对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接