Firebase setValue没有创建唯一的子节点?

时间:2017-07-16 14:38:51

标签: android firebase firebase-realtime-database

    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);

    }

我正在尝试将4个对象从android app保存到firebase数据库。所以我使用循环将数据存储到节点中。它应该创建4个具有自动id的不同子,并将对象存储在那里。但它只将最后一个模型存储在一个唯一的ID中,如下图所示: enter image description here

如何保存具有唯一ID的所有四个对象(列表中的数据)?

4 个答案:

答案 0 :(得分:1)

在firebase上完整记录

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 :(得分: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);

    }

答案 2 :(得分: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数据库中作为空对象。

答案 3 :(得分: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来保存数据。