2016-05-15 71 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