在使用C語言開發(fā)Android應(yīng)用程序時(shí),經(jīng)常需要使用Java Native Interface(JNI)來連接Java代碼和C代碼。其中,一個(gè)常見的操作是使用C代碼創(chuàng)建JSON數(shù)據(jù)并將其傳遞給Java代碼。這時(shí)就需要使用jobject來創(chuàng)建JSON對(duì)象。
jclass json_class = (*env)->FindClass(env, "org/json/JSONObject"); jmethodID constructor = (*env)->GetMethodID(env, json_class, "", "()V"); jobject json_obj = (*env)->NewObject(env, json_class, constructor);
上面的代碼前兩行用來獲取JSONObject類和構(gòu)造方法的ID。第三行代碼則利用構(gòu)造方法創(chuàng)建了一個(gè)JSON對(duì)象。
接下來可以使用jobject提供的方法來向JSON對(duì)象中添加鍵值對(duì)。
jstring key = (*env)->NewStringUTF(env, "name"); jstring value = (*env)->NewStringUTF(env, "John Doe"); jmethodID put_method = (*env)->GetMethodID(env, json_class, "put", "(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;"); (*env)->CallObjectMethod(env, json_obj, put_method, key, value);
上面的代碼首先創(chuàng)建了一個(gè)表示鍵的字符串和一個(gè)表示值的字符串。然后獲取了put方法的ID并調(diào)用它來添加鍵值對(duì)。
最后,需要注意的是,在使用完jobject后,應(yīng)該及時(shí)釋放其資源。
(*env)->DeleteLocalRef(env, json_obj);
上面的代碼用來釋放之前創(chuàng)建的JSON對(duì)象。