[英]Firebase setValue with Map with different types
要更新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
类型。
有没有办法在从Map<String, Object>
设置值时使PLAYER_SCORE_KEY
为int
?
编辑:
getter getScore()
返回一个int
:
public int getScore() {
return score;
}
编辑:
为了澄清,只有从我的应用程序调用时,分数才会存储为字符串。 当web / iOS客户端添加/修改播放器时,它们将其保存为int。 问题是Android是唯一一个没有这样做的人!
(将我的模型设置为Firebase文档中的值不是一个选项,因为Firebase属性名称很丑,服务器人员使用不同的名称......)
我相信你的问题是你的地图参数。 您可能需要制作两个映射,一个包含参数(String,Object),另一个包含类型(Integer,Object)以保存任何整数信息。 然后相应地设置Firebase中的值。
否则,您可以在PLAYER_SCORE_KEY上使用Integer.parseInt()将其转换为整数,然后直接在Firebase中设置此值,而不是在地图中传递它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.