Android studio NDK笔记3 -通过c/c++返回HashMap等复杂参数给java

以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;
}

猜你喜欢

转载自blog.csdn.net/lixpjita39/article/details/79410319