Firebase setValue与不同类型的地图

时间:2016-05-15 00:34:16

标签: 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最终会成为Firebase中的string,而它应该是int

enter image description here

我认为这是有道理的,因为我正在执行Map并声明其值为Object类型。

PLAYER_SCORE_KEY设置值时,有没有办法让int成为Map<String, Object>

修改

getter getScore()会返回int

public int getScore() {
     return score;
}

修改

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

(将我的模型设置为Firebase文档中的值不是一个选项,因为Firebase属性名称很丑,服务器人员使用不同的名称...)

1 个答案:

答案 0 :(得分:0)

我相信你的问题是你的地图参数。您可能需要制作两个映射,一个包含参数(String,Object),另一个包含类型(Integer,Object)以保存任何整数信息。然后相应地设置Firebase中的值。

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