要更新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
但數據庫商店是作爲一個字符串(你可以通過數字周圍顯示的引號告訴)。字符串到整數的轉換不會自動發生,您必須將其存儲爲數字,或者在代碼中處理它。 –