我试图使用JNI将一些数据从C++发送到java。JNI:如何将一组数据从C++转换为Java
在C++中,我有:
Array[0]: string name = "myName" int iterations = 16 float value = 15 ... etc
所以我想用JNI来返回Java中所有的数据,我想这一点,但不工作
JNIEXPORT jobjectArray JNICALL Java_com_testing_data_MainActivity_getDATA(JNIEnv *env, jobject obj)
{
// 1º Create a temp object
jobject dataClass
{
jstring name;
jint iterations;
jfloat value;
};
jobject tempObject = env->NewObject();
// Get data in c++ format int temp object type
std::vector<dataClass > data = getDataClass(); // First error, must be a c++ class, how could i get it?
// How much memory i need?
int dataSize = data.size();
// Reserve memory in java format
jint tempValues[dataSize];
jobjectArray tempArray = env->NewObjectArray(dataSize,dataClass,0); // 2º Error, it doesn 't create the class
// Temporal store data in jarray
for (int i = 0; i < dataSize ; i++)
{
tempArray[i].name = data[i].name;
tempArray[i].iterations = data[i].iterations;
tempArray[i].value = data[i].value;
}
return tempArray; // return temp array
}
这是正确的步骤来返回一个结构/对象的数据?如何解决这些错误?
NewObjectArray的第二个参数必须是java类引用,并且通过执行env-> FindClass(“fullpackagelevelnameofyourjavalclass”); – jogabonito 2012-08-03 09:45:35
尝试序列化数据或json字符串 – texasbruce 2012-08-03 10:04:51
您不能像在C中那样定义一个Java类。您应该看到的是Java中的一个类,如下所示: 'class MyData {String name;整数迭代;浮动值; MyData(String name,int iterations,float value){this.name = name; this.iterations =迭代; this.value = value; }}' – oldrinb 2012-08-04 03:02:45