2017-07-16 28 views
0
ArrayList<ListingModel> list = new ArrayList<ListingModel>(); 
    list.add(model); 
    list.add(model2); 
    list.add(model3); 
    list.add(model4); 

    for (ListingModel m : list) { 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myRef = database.getReference("node"); 
     myRef.push().setValue(m); 

    } 

我試圖從android應用程序保存4個對象到firebase數據庫。所以我正在使用循環來將數據存儲到節點中。它應該創建4個不同的孩子與自動ID並存儲在那裏的對象。但它只存儲最後一個模型在一個唯一的ID如下圖: enter image description hereFirebase setValue沒有創建獨特的子節點?

如何保存所有四個對象(列表中的數據)每個唯一的ID?

+0

保持初始化參考 DatabaseReference myRef = database.getReference(「node」); (ListingModel m:list){ myRef.push()。setValue(m); }' –

+0

同樣的結果,即使我在循環之外進行參照。 @JerinAMathews –

+0

將'CompletionListener'添加到'setValue()'來查看是否有寫入失敗。你對'節點'的孩子有沒有安全規則可能會拒絕前三種模式?我運行你的代碼,不能重現你的結果。 –

回答

1

在火力

private void writeNewPost(String userId, String username, String title, String body) { 
// Create new post at /user-posts/$userid/$postid and at 
// /posts/$postid simultaneously 
String key = mDatabase.child("posts").push().getKey(); 
Post post = new Post(userId, username, title, body); 
Map<String, Object> postValues = post.toMap(); 

Map<String, Object> childUpdates = new HashMap<>(); 
childUpdates.put("/posts/" + key, postValues); 
childUpdates.put("/user-posts/" + userId + "/" + key, postValues); 

mDatabase.updateChildren(childUpdates); 
} 

完全記錄把你的模型地圖,把它們和使用updateChildren

1

做的最好的方式是使用for循環。

ArrayList<ListingModel> list = new ArrayList<ListingModel>(); 
    list.add(model); 
    list.add(model2); 
    list.add(model3); 
    list.add(model4); 

    for (int i =0; i<list.size();i++){ 
     ListingModel model = list.get(i); 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myRef = database.getReference("node"); 
     myRef.child(i).setValue(model); 

    } 
0

所以問題是與我如何設置模型(對不起,部分代碼在我的問題)

ListingModel model = new ListingModel(); 
    model.setTitle("test0"); 

    ListingModel model1 = new ListingModel(); 
    model.setTitle("test1"); 

    ListingModel model2 = new ListingModel(); 
    model.setTitle("test2"); 

    ListingModel model3 = new ListingModel(); 
    model.setTitle("test3"); 

我被實例化不同的車型,但只有改變的第一模式值。

model1,model2和model3是空的,因此沒有出現在firebase數據庫中作爲空對象。

0

我認爲代碼只讀一次。當你使用相同的id來寫入數據時,你將覆蓋以前的版本。

ArrayList<ListingModel> list = new ArrayList<ListingModel>(); 
list.add(model); 
list.add(model2); 
list.add(model3); 
list.add(model4); 

for (ListingModel m : list) { 
    FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference myRef = database.getReference("node"); 
    String modelID = myRef.push().getKey(); 
    myRef.child(modelID).setValue(m); 
} 

試試這個,我希望它有幫助。

順便說一句,練習使用updateChildren而不是setValue來保存數據。 ) `FirebaseDatabase數據庫= FirebaseDatabase.getInstance(;:外循環

相關問題