【发布时间】:2016-09-11 00:34:19
【问题描述】:
为了更新 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 属性名称很难看,而且服务器人员对所有内容都使用不同的名称...)
【问题讨论】:
-
很难确定,但很可能
player.getScore()返回一个字符串。如果您让它返回一个数字(例如Integer),Firebase 将存储该数字。 -
嗨@FrankvanPuffelen,player.getScore() 实际上返回一个int!
-
但是数据库存储的是一个字符串(你可以通过数字周围的引号来判断)。字符串到整数的转换不会自动发生,您要么必须将其存储为数字,要么在代码中处理。
-
@FrankvanPuffelen 我不认为我在关注你。它清楚地将其存储为字符串,仅在从我的应用程序调用时,因为我保存错误。 getScore() 返回一个整数。刚刚尝试用 Integer.valueOf() 包装它(没有意义但必须尝试),它仍然将其保存为字符串。 (从 Web/iOS 客户端调用时,BTW 分数保存为 int)。
标签: java android dictionary firebase