java - Firebase setValue 与不同类型的 Map

标签 java android dictionary firebase

为了更新 Firebase 中的对象,我使用了这段代码,它将我的模型转换为字典。

这是执行此类操作的方法:

private static Map<String, Object> getPlayerData(Player player) {
    Map<String, Object> data = new HashMap<>();
    data.put(PLAYER_ID_KEY, player.getId());
    data.put(PLAYER_NAME_KEY, player.getFullName());
    data.put(PLAYER_SCORE_KEY, player.getScore());
    data.put(PLAYER_STATUS_KEY, player.getStatus());
    return data;
}

这就是我使用结果的方式,将其设置为 theFirebaseRef 的值:

Map<String, Object> playerData = getPlayerData(userAsPlayer, newPlayerStatus);

theFirebaseRef.setValue(playerData, new Firebase.CompletionListener() {/**irrelevant code**/});

它可以工作,但是 PLAYER_SCORE_KEY最终为 string在 Firebase 中,它应该是 int :

enter image description here

我想这是有道理的,因为我正在做 Map并声明其值的类型为 Object .

有没有办法制作 PLAYER_SCORE_KEY成为 int当设置 Map<String, Object> 中的值时?

编辑:

setter/getter getScore()返回 int :

public int getScore() {
     return score;
}

编辑:

澄清一下,仅当从我的应用程序调用时,分数才会存储为字符串。当 Web/iOS 客户端添加/修改播放器时,它们会将其保存为 int。 问题是 Android 是唯一没有这样做的!

(按照 Firebase 文档中的方式将我的模型设置为值不是一个选项,因为 Firebase 属性名称很难看,而且服务器人员对所有内容都使用不同的名称...)

最佳答案

我相信你的问题是你的 map 参数。您可能需要创建两个映射,一个像您一样带有参数(字符串,对象),另一个类型为(整数,对象)来保存任何整数信息。然后在 Firebase 中相应地设置值。

否则,您可以在 PLAYER_SCORE_KEY 上使用 Integer.parseInt() 将其转换为整数,然后直接在 Firebase 中设置该值,而不是将其传递到 map 中。

关于java - Firebase setValue 与不同类型的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37233265/

相关文章:

android - 是否可以在通话过程中拦截语音数据?

android - Google MapView 上的动画标记

python - 按对象或两个 float 索引 python dict

python - 如果键已经存在,则将值附加到键(python/jython)

python - 合并字典项值的重复列表

java - 出现 do-while 错误

java - java中如何清除ClassCastException?

java - Eclipse Android Helloworld 空白

java - hadoop初学者问题

java - Spring boot elasticsearch @Field name 不起作用