2017-07-16 29 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(;:外循环

相关问题