【发布时间】:2017-10-11 08:55:37
【问题描述】:
我有cocos2d:: ValueMap:
ValueMap map;
map["key1"] = "value1";
map["key2"] = 1;
map["key3"] = true;
我想以HashMap<String,Object>
所以我编写了以下代码,在其中生成jobject hashMapObj,我想用值填充它:
jclass hashMapClass= jniGetInstance.env->FindClass("java/util/HashMap");
jmethodID hashMapInit = jniGetInstance.env->GetMethodID(hashMapClass, "<init>", "(I)V");
jobject hashMapObj = jniGetInstance.env->NewObject(hashMapClass, hashMapInit, values.size());
//javap -s -p java.util.HashMap | grep -A 1 put\(
jmethodID hashMapId = jniGetInstance.env->GetMethodID(hashMapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
for (auto it : map) { //https://github.com/cocos2d/cocos2d-x/blob/v3/cocos/base/CCValue.h
switch (it.second.getType()) {
case cocos2d::Value::Type::BOOLEAN:
jniGetInstance.env->CallObjectMethod(hashMapObj, hashMapId, "put",
jniGetInstance.env->NewStringUTF(
it.first.c_str()),
it.second.asBool());
break;
//...
default:
break;
}
}
我在排队时遇到了崩溃:
jniGetInstance.env->CallObjectMethod(
hashMapObj,
hashMapId,
"put",
jniGetInstance.env->NewStringUTF(
it.first.c_str()),
it.second.asBool());
在应用程序中检测到 JNI 错误:使用了无效的 jobject 0xd85d4aa0
编辑
jniGetInstance.env->CallObjectMethod(hashMapObj, hashMapId, "put","someString", true);
失败并出现同样的错误,所以问题出在hashMapObj
有什么想法吗?
【问题讨论】:
-
只是想知道为什么不将它作为 JSON 字符串发送,以便您可以将其打包到 java 中的 HashMap...
-
@RRTW 因为在 Java 端我有只接收
HashMap的 API -
boolean是否与java.lang.Boolean相同?boolean是一个对象吗?任何原始数据类型都是对象吗? ...您是否尝试创建并放在那里java.lang.Boolean? -
以 JSON 格式发送,新建一个 JavaAPI 将其打包为 HashMap,并将其传递给您现有的仅 HashMap API,我认为这是最快速且风险最低的方式。
标签: java android c++ cocos2d-x