2017-07-16 31 views
0

我正在嘗試使用適用於Android的Firebase進行某種評論。 只是有一個問題,有沒有什麼辦法可以添加新的項目數組?Firebase將項目動態添加到陣列

舉例來說,如果我有這樣類型的對象 enter image description here

如果我試圖推,將其轉換爲地圖 enter image description here

而且我不希望覆蓋每個該對象時間,因爲我將擁有多用戶支持,並且會在某個時候失敗。

我試圖做一個List來不要爲我的模型創建DataTransferObjects並支持使用Firebase進行自動分析。

謝謝!實際上,如果沒有任何創意可以與創建地圖一起使用。

我ObjectModel:

public class Company implements Parcelable { 
    private String id; 
    private String name; 
    private String description; 
    private List<Comment> comments; 
} 

代碼爲推動項目:

final DatabaseReference ref = companiesRef.child(companyId).child(NODE_COMMENTS).push(); 
     return Single.create(e -> ref.setValue(comment) 
       .addOnCompleteListener(task -> { 
        e.onSuccess(task.isSuccessful()); 
       })); 
+0

添加代碼的某些行 –

+0

看到這個Q的評論:https://stackoverflow.com/questions/42872303/firebase-saves-data-as-list-and-sometimes-as-map-對象 – Thomas

+0

我想托馬斯特別提到這個評論:https://stackoverflow.com/questions/42872303/firebase-saves-data-as-list-and-sometimes-as-map-object#comment72855846_42872303 –

回答

0

這是它如何工作的,看下面的例子中我已經存儲了 「0」 作爲我的第一個commentID和「1 「作爲我的第二個評論ID。如您所見,我將lastCommentID存儲爲列表中最後評論的評論ID。

{ 
    "comments": { 
    "0": { 
     "text": "mycomment", 
     "time": "142351516" 
    }, 
    "1": { 
     "text": "secondcomment", 
     "time": "153426564" 
    } 
    } 

"lastCommentId": "1" 
} 

所以每當你想新的評論添加到火力點,你必須首先檢索lastCommentID作爲一個字符串並將其轉換爲整數(例如1),然後加1的值(例如2),這樣,當你保存下一個評論,它不會覆蓋以前的版本。

請注意,每次向數據庫添加註釋時都要替換lastCommentID。

{ 
    "comments": { 
    "0": { 
     "text": "mycomment", 
     "time": "142351516" 
    }, 
    "1": { 
     "text": "secondcomment", 
     "time": "153426564" 
    }, 
    "2": { 
     "text": "thirdcomment", 
     "time": "153426564" 
    } 
    } 

"lastCommentId": "2" 
} 
+0

謝謝,事情是我想將新對象(評論)添加到Firebase中已有的列表中。 –

+0

對不起,誤解了這種情況。我發現你已經找到了你的答案。爲什麼問一個你已經知道答案的問題? – UmarZaii

+0

Umar,對不起,這段代碼是用於推送對象的,但正如我在第二張屏幕上顯示的那樣,它會將列表轉換爲地圖,並且我試圖將新項目插入到列表中,所以這不是我正在尋找的。剛剛添加它來顯示我已經嘗試過。所以我仍然在尋找答案 –