将数组从JNI传递到Java
我想访问从JNI到Java的数组(通过创建共享库libtest.so
文件)
我这样做如下:
JNI代码(C)
int size = 5; /* Array Size */ char sample_arr[size] = {1, 2, 3, 4, 5}; /* Array to be accessed in Java */ jbyteArray result_arr = (*env)->NewByteArray(env, size); (*env)->SetByteArrayRegion(env, result_arr, 0, size, sample_arr); jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V"); (*env)->CallVoidMethod(env, obj, mid, get_event);
我相信JNI中的jbyte是等效的。
编译上面的代码以形成共享对象libtest.so
。
Java代码
public class Callbacks { char result_arr[]; public void Callbacks() { System.loadLibrary("test"); /* Load the Shared Object */ } public void callback(int get_event) { .... Log.d(TAG, "Received Array at Java: result_arr[] : "+Arrays.toString(result_arr)); .... } }
产量
D/[JNI] (3106): Recieved Array at Java: result_arr[] : null
输出应该是: 1, 2, 3, 4, 5
但我得到null
这是访问arrays的正确方法吗?
请指出任何错误。
我是java的新手,也是JNI的初学者。 虽然精通C语言。
我将不胜感激任何帮助。
你究竟是如何将结果_arr数组从JNI发送回Java的? 我不确定get_event参数是什么,但它绝对不是对result_arr的引用。 您应该执行以下两项操作中的一项:A)向回调添加第二个参数并将result_arr传递回Java,或者B)从JNI buy设置Callbacks.result_arr实例变量获取该类,然后获取该类的字段ID 。 如果您需要更多帮助,则需要发布更完整的代码。