如何在jni中返回返回泛型类型的函数的方法ID?

时间:2015-02-02 09:07:23

标签: android android-ndk java-native-interface

    jclass queueCls = (jclass)(*env)->FindClass(env, "java/util/concurrent/LinkedBlockingQueue");
    if(queueCls == NULL) {
        LOGE("can not get class for blocking queue");
                return;
    }
    jmethodID take = (*env)->GetMethodID(env, queueCls, "take",
            "()[B");
    if (take == NULL) {
        LOGE("can not get take method for blocking queue");
        return;
    }

并且take的值始终为NULL。见this。我正在使用LinkedBlockingQueue<byte[]>

感谢是否提供任何示例。

1 个答案:

答案 0 :(得分:1)

看看this回答。

您应该将LinkedBlockingQueue<byte[]>对象视为JNI端的简单LinkedBlockingQueue,因为 Java Generics 在编译时被解析。

我建议您使用 javah 从编译的类开始生成具有正确JNI签名的正确本机头文件。