Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将C++字典转换为哈希表_Java_Android_Java Native Interface_Hashtable - Fatal编程技术网

Java 将C++字典转换为哈希表

Java 将C++字典转换为哈希表,java,android,java-native-interface,hashtable,Java,Android,Java Native Interface,Hashtable,我在JNI中创建了一个函数来将Map转换为jobject 并将此作业对象发送到JAVA 可以使用布尔值,但字符串和整数将崩溃。。。。 为什么进程在字符串和整数处崩溃 typedef Map<std::string, AbObj> Dictionary; jobject Dictionary2jobject(JNIEnv *env, Dictionary* pDictionary) { jclass class_Hashtable=env->FindClass("jav

我在JNI中创建了一个函数来将Map转换为jobject 并将此作业对象发送到JAVA

可以使用布尔值,但字符串和整数将崩溃。。。。 为什么进程在字符串和整数处崩溃

typedef Map<std::string, AbObj> Dictionary;

jobject Dictionary2jobject(JNIEnv *env, Dictionary* pDictionary)
{
    jclass class_Hashtable=env->FindClass("java/util/Hashtable");
    jmethodID construct_method=env->GetMethodID( class_Hashtable, "<init>","()V");
    jobject objMap = env->NewObject(class_Hashtable, construct_method, "");
    jmethodID add_method= env->GetMethodID(class_Hashtable,"put","(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

    for(Dictionary::const_iterator it = pDictionary->begin(); it != pDictionary->end(); ++it)
    {
        switch(it->second.GetType())
        {
        case AbObj::OT_NIL:
            return NULL;
        case AbObj::OT_STR:
            {
                env->CallObjectMethod(objMap, add_method, env->NewStringUTF(it->first.c_str()), env->NewStringUTF(it->second.data._str));
            }
            break;
        case AbObj::OT_BLN:
            {
                env->CallObjectMethod(objMap, add_method, env->NewStringUTF(it->first.c_str()), (jboolean)it->second.data._bln);
            }
            break;
        case AbObj::OT_S32:     //int32_t
            {
                env->CallObjectMethod(objMap, add_method, env->NewStringUTF(it->first.c_str()), (jint)999);
            }
            break;
        case AbObj::OT_S64:     //int64_t
            {
                env->CallObjectMethod(objMap, add_method, env->NewStringUTF(it->first.c_str()), (jdouble)it->second.data._s64);
            }
            break;
    }
}
return objMap;

}

传递第四个参数值的表达式是否自行工作?i、 在调用CallObjectMethod之前?是的,所有的值都是正确的。您确定已经隔离了正确的成功案例吗?我本以为所有传递原语的情况都会失败,所有传递对象(如字符串)的情况都会成功。如果是这样的话,这里有一个很大的提示。