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

标签 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[]。 我还有什么地方出错了吗?

最佳答案

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/

相关文章:

android - 如何更改程序代码中的EditText 边框线颜色?

android - 如何检测我的 android 设备何时与配对的蓝牙设备连接/断开连接

Android Studio 找不到 OpenCV header

java - JNI 将字符串从 java 传递到 c++,然后将 c++ 字符串传递给字符串数组

java - 使用 FFMpeg 将 BGR BufferedImage 快速转换为 YUV

java - 毫秒至今 C++

java - 在 Android 的 View 中创建透明圆形切口

Android:消息中的ArrayList

c++ - android ndk 和 cygwin

android - 如何处理这种情况 : andorid epoll_wait return -1 and errno=4 used ndk