要更新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
:
我认为这是有道理的,因为我正在执行Map
并声明其值为Object
类型。
从PLAYER_SCORE_KEY
设置值时,有没有办法让int
成为Map<String, Object>
?
修改
getter getScore()
会返回int
:
public int getScore() {
return score;
}
修改
为了澄清,只有从我的应用程序调用时,分数才会存储为字符串。当web / iOS客户端添加/修改播放器时,它们将其保存为int。 问题是Android是唯一一个没有这样做的人!
(将我的模型设置为Firebase文档中的值不是一个选项,因为Firebase属性名称很丑,服务器人员使用不同的名称...)
答案 0 :(得分:0)
我相信你的问题是你的地图参数。您可能需要制作两个映射,一个包含参数(String,Object),另一个包含类型(Integer,Object)以保存任何整数信息。然后相应地设置Firebase中的值。
否则,您可以在PLAYER_SCORE_KEY上使用Integer.parseInt()将其转换为整数,然后直接在Firebase中设置此值,而不是在地图中传递它。