首页 > 解决方案 > 如何在本机c ++ jni中实现java类型数组

问题描述

我有一个在 java 中定义的类类型的数组。我正在尝试在本机 c++ JNI 中使用该类类型数组并从中准备 c++ parcel 对象。

下面是我在java中的类结构:

public class MyIdentifier implements Parcelable {

    private String abc;
    private String def;

    public MyIdentifier(String abc, String def) {
        this(abc, def);
    }
}

这就是我想从 c++ 调用的 java 函数

 public int setident(List<MyIdentifier> ident) throws RemoteException {
                Parcel _data = Parcel.obtain();
                Parcel _reply = Parcel.obtain();
                try {
                    _data.writeInterfaceToken(Stub.DESCRIPTOR);
                    _data.writeTypedList(ident);
                    this.mRemote.transact(169, _data, _reply, 0);
                    _reply.readException();
                    return _reply.readInt();
                } finally {
                    _reply.recycle();
                    _data.recycle();
                }
            }

标签: javac++java-native-interface

解决方案


Arrays.asList(javaList)最简单的方法是从 C++调用。在这里,我假设您array_of_MyIdentifier拥有jobject

jobject array_of_MyIdentifier = ...;
jclass Arrays = env->FindClass("java/util/Arrays");
jmethodID Arrays_asList = env->GetStaticMethodID(Arrays, "asList", "([Ljava/lang/Object;)Ljava/util/List;");
jobject arrayList = env->CallStaticObjectMethod(Arrays, Arrays_asList, array_of_MyIdentifier);

推荐阅读