getArrayLength()返回了一个庞大的数字......

时间:2011-07-29 23:28:17

标签: android java-native-interface

我想了解jni,所以我开始乱砍hellojni,我遇到了这个问题。

我的java代码如下所示:

                    short[] buf = new short[16];
                    Log.d("hello", "before!");
                    write(buf, 0, 16);

我的C代码如下:

jint
Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortArray buf, jint off, jint len)
{
    char debug[1024];
    int ii = 0;
    jsize cbuflen = (*env)->GetArrayLength(env, buf);

    sprintf(debug, "array length: %d", cbuflen);
    LOGD(debug);
...
...

输出结果为:

阵列长度:1079082088

为什么数组长度如此之大?

1 个答案:

答案 0 :(得分:4)

你能展示你的整个JNI文件吗?您没有在JNI函数中声明目标对象。通常参数是JNIEnv * env,jobject javaObject等。这意味着你认为jshortArray实际上是指向Java对象的指针,它可以解释你得到的奇怪结果。