Java 将C++字典转换为哈希表
我在JNI中创建了一个函数来将Map转换为jobject 并将此作业对象发送到JAVA 可以使用布尔值,但字符串和整数将崩溃。。。。 为什么进程在字符串和整数处崩溃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
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之前?是的,所有的值都是正确的。您确定已经隔离了正确的成功案例吗?我本以为所有传递原语的情况都会失败,所有传递对象(如字符串)的情况都会成功。如果是这样的话,这里有一个很大的提示。