以Hashmap为例子:
1.new一个Hashmap:
//FindClass
jclass class_hashmap = (*env)->FindClass(env, "java/util/HashMap");
//使用GetMethodID调用初始化方法
jmethodID hashmap_init = (*env)->GetMethodID(env, class_hashmap, "<init>","()V");
//使用NewObject新建一个对象
jobject HashMap = (*env)->NewObject(env, class_hashmap, hashmap_init, "");
2.往Hashmap中插入值:
//使用GetMethodID获取Hashmap中的put方法
jmethodID HashMap_put = (*env)->GetMethodID(env, class_hashmap, "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
//使用CallObjectMethod插入数据
(*env)->CallObjectMethod(env, HashMap, HashMap_put, (*env)->NewStringUTF(env, "key1"), (*env)->NewStringUTF(env, "value1"));
具体实现如下:
JNIEXPORT jobject JNICALL Java_com_ndk_test_JniClient_setMap(JNIEnv *env,
jclass cls) {
jclass class_hashmap = (*env)->FindClass(env, "java/util/HashMap");
jmethodID hashmap_init = (*env)->GetMethodID(env, class_hashmap, "<init>",
"()V");
jobject HashMap = (*env)->NewObject(env, class_hashmap, hashmap_init, "");
jmethodID HashMap_put = (*env)->GetMethodID(env, class_hashmap, "put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
(*env)->CallObjectMethod(env, HashMap, HashMap_put, (*env)->NewStringUTF(env, "key1"), (*env)->NewStringUTF(env, "value1"));
(*env)->CallObjectMethod(env, HashMap, HashMap_put,(*env)->NewStringUTF(env, "key2"), (*env)->NewStringUTF(env, "value2"));
return HashMap;
}