要更新Firebase中的对象,我使用此代码将模型转换为字典。Firebase setValue与不同类型的地图
这是做这样的事情的方法:
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
?
编辑:
getScore()
返回int
吸气:
public int getScore() {
return score;
}
编辑:
为了澄清,比分被存储为一个从我的应用程序称为只有当字符串。当web/iOS客户端添加/修改播放器时,将其保存为int。 问题是,Android是唯一一个不这样做!
(设置我的模型作为火力地堡文档中做了值不是一种选择,因为火力地堡属性名称是丑陋和服务器使用的人的一切不同的名字......)
很难确定,但很有可能'player.getScore()'返回一个字符串。如果您让它返回一个数字(例如'Integer'),则Firebase将存储该数字。 –
Hi @FrankvanPuffelen,player.getScore()实际上返回一个int! – RominaV
但数据库商店是作为一个字符串(你可以通过数字周围显示的引号告诉)。字符串到整数的转换不会自动发生,您必须将其存储为数字,或者在代码中处理它。 –