Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI从C访问对象数组错误 我有一个Android项目,使用C++库,我需要把一个对象数组发送到C++代码。p>_Java_Android_C++_C_Java Native Interface - Fatal编程技术网

Java JNI从C访问对象数组错误 我有一个Android项目,使用C++库,我需要把一个对象数组发送到C++代码。p>

Java JNI从C访问对象数组错误 我有一个Android项目,使用C++库,我需要把一个对象数组发送到C++代码。p>,java,android,c++,c,java-native-interface,Java,Android,C++,C,Java Native Interface,这是我的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

这是我的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);
    }
}

知道为什么我的数组引用看起来是类引用吗?我对本机类型的数组没有问题,只对对象有问题

我相信你的函数签名

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)
您缺少第二个参数——在静态方法中,它始终是类对象

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