想使用 jni 将 ArrayList<jsonobject> 从 cpp 传递到 java
want to pass a ArrayList<jsonobject> from cpp to java using jni
实际上我是 jni 的新手,我想知道如何将 ArrayList"jsonObject" 从 cpp 传递到 java。我不知道如何去做。可以一些一个帮助我编写用于此的 code.the jar 是 json-simple 2.2。
这是我的代码仅尝试 json要写入的对象
#include<jni.h>
#include<iostream>
#include<C:\Users\yuvaraj-pt3134\Desktop\User\User.h>
using namespace std;
JNIEXPORT jobject JNICALL Java_User_jo(JNIEnv *env, jclass cls,jobject obj)
{
jclass jsoncls = env->FindClass("org/json/JSONObject");
jobject newObj;
jmethodID constructorID = env->GetMethodID(jsoncls,"<init>","()V");
newObj = env->NewObject(jsoncls, constructorID);
jmethodID putStringID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;");
if(putStringID == NULL)
{
printf("\n putStringID not created!\n");
return NULL;
}
jmethodID putIntID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;I)Lorg/json/JSONObject;");
newObj = env->CallObjectMethod(newObj, putStringID, env->NewStringUTF("str"), env->NewStringUTF("Hai"));
newObj = env->CallObjectMethod(newObj, putIntID, env->NewStringUTF("val"), 7);
static jclass java_util_ArrayList;
static jmethodID java_util_ArrayList_;
jmethodID java_util_ArrayList_add;
java_util_ArrayList = env->FindClass("java/util/ArrayList");
java_util_ArrayList_ = env->GetMethodID(java_util_ArrayList, "<init>", "(I)V");
java_util_ArrayList_add = env->GetMethodID(java_util_ArrayList, "add", "(Ljava/lang/Object;)Z");
jobject result=env->NewObject(java_util_ArrayList,java_util_ArrayList_,10);
result=env->CallObjectMethod(result, java_util_ArrayList_add, newObj);
return result;
}
ArrayList#add
return一个boolean
。您需要改用 CallBooleanMethod
。
不要忘记 return newObj
(您的列表)而不是 result
(add
调用的结果)!
#include<jni.h>
#include<iostream>
#include<C:\Users\yuvaraj-pt3134\Desktop\User\User.h>
using namespace std;
JNIEXPORT jobject JNICALL Java_User_jo(JNIEnv *env, jclass cls,jobject obj)
{
jclass jsoncls = env->FindClass("org/json/JSONObject");
jobject newObj;
jmethodID constructorID = env->GetMethodID(jsoncls,"<init>","()V");
newObj = env->NewObject(jsoncls, constructorID);
jmethodID putStringID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;");
if(putStringID == NULL)
{
printf("\n putStringID not created!\n");
return NULL;
}
jmethodID putIntID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;I)Lorg/json/JSONObject;");
newObj = env->CallObjectMethod(newObj, putStringID, env->NewStringUTF("str"), env->NewStringUTF("Hai"));
newObj = env->CallObjectMethod(newObj, putIntID, env->NewStringUTF("val"), 7);
static jclass java_util_ArrayList;
static jmethodID java_util_ArrayList_;
jmethodID java_util_ArrayList_add;
java_util_ArrayList = env->FindClass("java/util/ArrayList");
java_util_ArrayList_ = env->GetMethodID(java_util_ArrayList, "<init>", "()V");
java_util_ArrayList_add = env->GetMethodID(java_util_ArrayList, "add", "(Ljava/lang/Object;)Z");
jobject result=env->NewObject(java_util_ArrayList,java_util_ArrayList_,10);
env->CallBooleanMethod(result, java_util_ArrayList_add, newObj);
newObj = env->NewObject(jsoncls, constructorID);
newObj = env->CallObjectMethod(newObj, putStringID, env->NewStringUTF("str"), env->NewStringUTF("yuvaraj"));
newObj = env->CallObjectMethod(newObj, putIntID, env->NewStringUTF("val"), 9);
env->CallBooleanMethod(result, java_util_ArrayList_add, newObj);
return result;
}
实际上我是 jni 的新手,我想知道如何将 ArrayList"jsonObject" 从 cpp 传递到 java。我不知道如何去做。可以一些一个帮助我编写用于此的 code.the jar 是 json-simple 2.2。 这是我的代码仅尝试 json要写入的对象
#include<jni.h>
#include<iostream>
#include<C:\Users\yuvaraj-pt3134\Desktop\User\User.h>
using namespace std;
JNIEXPORT jobject JNICALL Java_User_jo(JNIEnv *env, jclass cls,jobject obj)
{
jclass jsoncls = env->FindClass("org/json/JSONObject");
jobject newObj;
jmethodID constructorID = env->GetMethodID(jsoncls,"<init>","()V");
newObj = env->NewObject(jsoncls, constructorID);
jmethodID putStringID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;");
if(putStringID == NULL)
{
printf("\n putStringID not created!\n");
return NULL;
}
jmethodID putIntID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;I)Lorg/json/JSONObject;");
newObj = env->CallObjectMethod(newObj, putStringID, env->NewStringUTF("str"), env->NewStringUTF("Hai"));
newObj = env->CallObjectMethod(newObj, putIntID, env->NewStringUTF("val"), 7);
static jclass java_util_ArrayList;
static jmethodID java_util_ArrayList_;
jmethodID java_util_ArrayList_add;
java_util_ArrayList = env->FindClass("java/util/ArrayList");
java_util_ArrayList_ = env->GetMethodID(java_util_ArrayList, "<init>", "(I)V");
java_util_ArrayList_add = env->GetMethodID(java_util_ArrayList, "add", "(Ljava/lang/Object;)Z");
jobject result=env->NewObject(java_util_ArrayList,java_util_ArrayList_,10);
result=env->CallObjectMethod(result, java_util_ArrayList_add, newObj);
return result;
}
ArrayList#add
return一个boolean
。您需要改用 CallBooleanMethod
。
不要忘记 return newObj
(您的列表)而不是 result
(add
调用的结果)!
#include<jni.h>
#include<iostream>
#include<C:\Users\yuvaraj-pt3134\Desktop\User\User.h>
using namespace std;
JNIEXPORT jobject JNICALL Java_User_jo(JNIEnv *env, jclass cls,jobject obj)
{
jclass jsoncls = env->FindClass("org/json/JSONObject");
jobject newObj;
jmethodID constructorID = env->GetMethodID(jsoncls,"<init>","()V");
newObj = env->NewObject(jsoncls, constructorID);
jmethodID putStringID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;");
if(putStringID == NULL)
{
printf("\n putStringID not created!\n");
return NULL;
}
jmethodID putIntID = env->GetMethodID(jsoncls, "put", "(Ljava/lang/String;I)Lorg/json/JSONObject;");
newObj = env->CallObjectMethod(newObj, putStringID, env->NewStringUTF("str"), env->NewStringUTF("Hai"));
newObj = env->CallObjectMethod(newObj, putIntID, env->NewStringUTF("val"), 7);
static jclass java_util_ArrayList;
static jmethodID java_util_ArrayList_;
jmethodID java_util_ArrayList_add;
java_util_ArrayList = env->FindClass("java/util/ArrayList");
java_util_ArrayList_ = env->GetMethodID(java_util_ArrayList, "<init>", "()V");
java_util_ArrayList_add = env->GetMethodID(java_util_ArrayList, "add", "(Ljava/lang/Object;)Z");
jobject result=env->NewObject(java_util_ArrayList,java_util_ArrayList_,10);
env->CallBooleanMethod(result, java_util_ArrayList_add, newObj);
newObj = env->NewObject(jsoncls, constructorID);
newObj = env->CallObjectMethod(newObj, putStringID, env->NewStringUTF("str"), env->NewStringUTF("yuvaraj"));
newObj = env->CallObjectMethod(newObj, putIntID, env->NewStringUTF("val"), 9);
env->CallBooleanMethod(result, java_util_ArrayList_add, newObj);
return result;
}