java - 如何在本机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();
}
}
解决方案
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);
推荐阅读
- ruby-on-rails - 在范围内使用关联域进行计算
- alphabet - ∑和∑1的区别
- spring - 混合参数策略 - 仅使用命名、位置或 JPA 序数策略之一
- c# - 在 c# 中获取属性的调用者信息
- javascript - 在 angular6 中刷新页面时,用户名将为空
- android-studio - Android Studio Web-view 访问存储的权限?
- python - 为什么图像块在提取时会像素化,但在连接时会变得正常?
- javascript - 我如何将所有这些代码存储在变量中
- python - 为 pip 设置私人仓库需要常规包的密码
- amazon-web-services - 尝试使用 Terraform 构建内部应用程序负载均衡器