想使用 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#addreturn一个boolean。您需要改用 CallBooleanMethod。 不要忘记 return newObj(您的列表)而不是 resultadd 调用的结果)!

#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;

}