java - 如何将cocos2d ValueMap作为HashMap发送给Java?

标签 java android c++ cocos2d-x

我有cocos2d:: ValueMap :

 ValueMap map;
 map["key1"] = "value1";
 map["key2"] = 1;
 map["key3"] = true;

我想将它发送到 Java 作为 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 DETECTED ERROR IN APPLICATION: use of invalid jobject 0xd85d4aa0

编辑

jniGetInstance.env->CallObjectMethod(hashMapObj, hashMapId, "put","someString", true);

失败并出现同样的错误,所以问题出在 hashMapObj

有什么想法吗?

最佳答案

改变

jniGetInstance.env->CallObjectMethod(hashMapObj, hashMapId, "put",
    jniGetInstance.env->NewStringUTF(
        it.first.c_str()),
        it.second.asBool());

jniGetInstance.env->CallObjectMethod(hashMapObj, hashMapId,
    jniGetInstance.env->NewStringUTF(it.first.c_str()),
    it.second.asBool());

因为“put”方法只接受 2 个参数。

还要确保 it.second.asBool() 返回 jboolean - 它不同于 C++ bool 类型。

关于java - 如何将cocos2d ValueMap作为HashMap发送给Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46683950/

相关文章:

java - 单击时出现 NullPointerException,即使按钮变量设置为 "field variable"

java - 运行位于映射网络驱动器上的 java 类

java - IoT 将数据包从设备发送到网络服务器

android - 当我尝试在设备上安装已编译的 .apk 时,INSTALL_FAILED_UPDATE_INCOMPATIBLE

c++ - SFML C++ 绘制形状 vector

c++ - 如何管理已通过信号槽传递的对象的删除?

c++ - 使用结构统计()

java - jdbc驱动的功能

java - Android Socket fatal error

android - 使用 OpenCV,如何在检测到的形状/ Blob 的边缘内绘制轮廓?