在JNI中获取字符串列表的正确方法

时间:2015-09-17 14:12:15

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

我在C中有一个JNI函数,它在Java FILE类中传递,该类表示目录列表。我想调用list()函数并获取字符串列表(目录中的文件)。这样做的最佳方式是什么?

现在我有

static void* my_function(JNIEnv *env, jobject obj, jobject dir){
    jarray listRet;
    jclass cls = (*env)->GetObjectClass(env, dir);
    jmethodID method = (*env)->GetMethodID(env, cls, "list", "()[Ljava/lang/String");
    listRet = (*env)->CallObjectMethod(env, cls, method);

    jsize stringCount = (*env)->GetArrayLength(env, listRet);
}

但是,通过添加日志记录语句,它似乎永远不会超过GetObjectClass调用。 那么这个电话是否正确?此外,GetMethodID调用是否正确? list()的返回类型是(java)String []。 还有其他地方我出错吗?

1 个答案:

答案 0 :(得分:1)

list不是File的静态方法。也就是说,它属于File(在您的情况下为dir)的实例,而不属于File类。

所以而不是:

listRet = (*env)->CallObjectMethod(env, cls, method);

你应该使用:

listRet = (*env)->CallObjectMethod(env, dir, method);

此外,您似乎在list的签名中缺少分号。它应该是"()[Ljava/lang/String;"