我在 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[]。 我还有什么地方出错了吗?
最佳答案
list
不是 File
的静态方法。也就是说,它属于 File
的实例(在您的情况下为 dir
),而不属于 File
类。
所以代替:
listRet = (*env)->CallObjectMethod(env, cls, method);
你应该使用:
listRet = (*env)->CallObjectMethod(env, dir, method);
此外,您似乎在 list
的签名中缺少一个分号。应该是 "()[Ljava/lang/String;"
关于android - 在 JNI 中获取字符串列表的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632527/