繁体   English   中英

Firebase setValue与不同类型的地图

[英]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_KEYint

编辑:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM