JNI方式遍历HashMap
extern "C"
extern "C"
JNIEXPORT jstring JNICALL
Java_com_xxx_sign_SignUtil_sign0(JNIEnv *env, jobject params) {
jclass hashmapClass = env->FindClass("java/util/HashMap");
jmethodID entrySetMID = env->GetMethodID(hashmapClass, "entrySet", "()Ljava/util/Set;");
jobject setObj = env->CallObjectMethod(params, entrySetMID);
jclass setClass = env->FindClass("java/util/Set");
jmethodID iteratorMID = env->GetMethodID(setClass, "iterator", "()Ljava/util/Iterator;");
jobject iteratorObj = env->CallObjectMethod(setObj, iteratorMID);
jclass iteratorClass = env->FindClass("java/util/Iterator");
jmethodID hasNextMID = env->GetMethodID(iteratorClass, "hasNext", "()Z");
jmethodID nextMID = env->GetMethodID(iteratorClass, "next", "()Ljava/lang/Object;");
jclass entryClass = env->FindClass("java/util/Map$Entry");
jmethodID getKeyMID = env->GetMethodID(entryClass, "getKey", "()Ljava/lang/Object;");
jmethodID getValueMID = env->GetMethodID(entryClass, "getValue", "()Ljava/lang/Object;");
query_info temp;
while (env->CallBooleanMethod(iteratorObj, hasNextMID)) {
jobject entryObj = env->CallObjectMethod(iteratorObj, nextMID);
jstring courseJS = (jstring) env->CallObjectMethod(entryObj, getKeyMID);
if (courseJS == NULL)
continue;
const char *courseStr = env->GetStringUTFChars(courseJS, NULL);
jstring scoreObj = static_cast<jstring>(env->CallObjectMethod(entryObj, getValueMID));
if (scoreObj == NULL)
continue;
const char *score = env->GetStringUTFChars(scoreObj, NULL);
env->ReleaseStringUTFChars(courseJS, courseStr);
env->DeleteLocalRef(entryObj);
env->DeleteLocalRef(courseJS);
env->DeleteLocalRef(scoreObj);
}
env->DeleteLocalRef(hashmapClass);
env->DeleteLocalRef(setObj);
env->DeleteLocalRef(setClass);
env->DeleteLocalRef(iteratorObj);
env->DeleteLocalRef(iteratorClass);
env->DeleteLocalRef(entryClass);
return env->NewStringUTF("");
}