需要使用类对象从Java程序输入数据,将其转换为json对象,然后通过JNI传递给c ++。 在C ++中, 必须从对象中检索数据并将其存储在文件中。
我不知道如何发送和检索json对象的数据。 帮我解决一些简单的代码片段!
class sample
{
public native void callCPP(JSONObject jo);
public static void main(String args[])
{
int val = 7;
JSONObject jo = new JSONObject;
jo.put("val",val);
sample s = new sample();
s.callCPP(jo);
}
}
反之亦然(将数据从cpp作为JSONObject从cpp发送到Java。
答案 0 :(得分:0)
假设您的意思是org.json.JSONObject
:
void Java_sample_callCPP(JNIEnv *env, jobject obj, jobject arg) {
// This code calls arg->getInt("val"), assuming it is a org.json.JSONObject
jclass cls = env->FindClass("org/json/JSONObject"); // alternatively: env->GetObjectClass(arg);
jmethodID method = env->GetMethodID(cls, "getInt", "(Ljava/lang/String;)I"); // int getInt(java.lang.String key)
jint val = env->CallIntMethod(arg, method, env->NewStringUTF("val"));
std::cout << "val: " << val << std::endl;
jmethodId method2 = env->GetMethodID(cls, "getString", "(Ljava/lang/String;)Ljava/lang/String;");
jstring strVal = (jstring) env->CallObjectMethod(arg, method2, env->NewStringUTF("strVal"));
// Make a copy of the returned Java string. We need to release the pointer again, too.
const jchar *ptr = env->GetStringUTFChars(strVal, nullptr);
std::string strVal_copy(ptr);
env->ReleaseStringUTFChars(strVal, ptr);
std::cout << "strVal: " << strVal_copy << std::endl;
}