Android:如何将自定义对象的数组列表传递给c++代码,并使用JNI在Java代码中获得这些对象的操纵数组列表
Android: How to pass an ArrayList of custom object to C++ code and get the manipulated ArrayList of those objects in Java code using JNI
我正在制作一个Android应用程序,我希望一些功能用c++编写,并使用JNI进行通信。为此,我想通过传递自定义对象的ArrayList来调用c++函数。
示例:public class Student{
String name;
String class;
int score;
}
...
public native ArrayList<Student> manipulateScore(ArrayList<Student>);
....
c++代码:JNIEXPORT ?ArrayList<Student>? JNICALL Java_com_packagename_ProjectName_MainActivity_manipulateScore(JNIEnv* env, jobject ob, ?ArrayList<STudent>?){
//to traverse Arraylist<Student> and access Student.score member...
}
应该用什么来代替?我如何得到这个数组列表并遍历它在我的c++代码?
谢谢你的帮助!
在c++代码中使用JNI操作ArrayList是可能的,但如果您传递一个简单的对象数组,您将使自己更容易:
public native void manipulateScore(Student[] students);
(也可以声明为Object[] students)
调用函数时使用ArrayList类的toArray()方法。
然后在c++代码中,你可以将参数声明为jobjectArray
JNIEXPORT void JNICALL Java_com_packagename_ProjectName_MainActivity_manipulateScore(JNIEnv* env, jobject ob, jobjectArray students)
然后您可以使用JNI函数来操作对象数组,如getObjectArrayElement来操作数组,而不必查找方法id并调用ArrayList访问器函数,这要复杂得多。
您可以在适当的位置操作数组(在这种情况下,返回值可以是void,或者成功/失败代码),或者返回使用newObjectArray创建的新对象数组。
相关文章:
- C++如何生成std::数组列表
- GTEST : 如何将数组列表作为参数传递到 ValuesIn of INSTANTIATE_TEST_CASE_P?
- 如何通过 cython 将 numpy 数组列表传递给 C++
- 如何删除数组列表中的元素
- 如何将移动平均线写入数组列表类?
- 如何使用pybind传递numpy数组列表
- 继承向量/数组/列表并更改其大小
- 内存泄漏 C++ 数组列表
- 如何使用一维数组列表初始化二维数组
- 从数组列表中的字符串迭代器获取 int dat<struct>
- 数组列表、行搜索和气泡排序.作业C++
- 是否可以使用三元运算符"?"在 C/C++ 中填充数组列表?
- 从我的c++应用程序调用c#dll(解析XML文件),将数组/列表返回给c++
- (C++)用于检查对象是否在向量/数组/列表/.中的模板
- C#中数组/列表的子集迭代器,没有屈服
- 链接数组列表实现
- 如何将多个位图包含在全局数组列表中
- C++:如何将数组的元素推送到数组列表中
- 视觉 我正在使用C++用于一些基本图形。我想知道如何读取顶点、索引和面以及如何在数组列表中使用面?
- C++ 将文件读入数组/列表/向量