为了更新 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
最终为 string
在 Firebase 中,它应该是 int
:
我想这是有道理的,因为我正在做 Map
并声明其值的类型为 Object
.
有没有办法制作 PLAYER_SCORE_KEY
成为 int
当设置 Map<String, Object>
中的值时?
编辑:
setter/getter getScore()
返回 int
:
public int getScore() {
return score;
}
编辑:
澄清一下,仅当从我的应用程序调用时,分数才会存储为字符串。当 Web/iOS 客户端添加/修改播放器时,它们会将其保存为 int。 问题是 Android 是唯一没有这样做的!
(按照 Firebase 文档中的方式将我的模型设置为值不是一个选项,因为 Firebase 属性名称很难看,而且服务器人员对所有内容都使用不同的名称...)
最佳答案
我相信你的问题是你的 map 参数。您可能需要创建两个映射,一个像您一样带有参数(字符串,对象),另一个类型为(整数,对象)来保存任何整数信息。然后在 Firebase 中相应地设置值。
否则,您可以在 PLAYER_SCORE_KEY 上使用 Integer.parseInt() 将其转换为整数,然后直接在 Firebase 中设置该值,而不是将其传递到 map 中。
关于java - Firebase setValue 与不同类型的 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37233265/