2016-05-15 79 views
1

要更新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

enter image description here

我想这很有道理,因为我在做Map并声明其值为Object

当设置Map<String, Object>的值时,有没有办法使PLAYER_SCORE_KEY成为int

编辑:

getScore()返回int吸气:

public int getScore() { 
    return score; 
} 

编辑:

为了澄清,比分被存储为一个从我的应用程序称为只有当字符串。当web/iOS客户端添加/修改播放器时,将其保存为int。 问题是,Android是唯一一个不这样做!

(设置我的模型作为火力地堡文档中做了值不是一种选择,因为火力地堡属性名称是丑陋和服务器使用的人的一切不同的名字......)

+1

很难确定,但很有可能'player.getScore()'返回一个字符串。如果您让它返回一个数字(例如'Integer'),则Firebase将存储该数字。 –

+0

Hi @FrankvanPuffelen,player.getScore()实际上返回一个int! – RominaV

+0

但数据库商店是作为一个字符串(你可以通过数字周围显示的引号告诉)。字符串到整数的转换不会自动发生,您必须将其存储为数字,或者在代码中处理它。 –

回答

0

我相信你的问题是你的地图参数。您可能需要制作两张地图,一张带有参数(字符串,对象),就像您拥有的一样,另一种类型(整数,对象)可以存放任何整数信息。然后相应地设置Firebase中的值。否则,您可能可以使用PLAYER_SCORE_KEY上的Integer.parseInt()将其转换为整数,然后直接在Firebase中设置此值,而不是将其传递到地图中。

+0

要做到这一点,我需要做两次firebaseRef.setValue,对吧?这不是提出两个要求吗? – RominaV