使用Android

时间:2018-11-01 05:51:22

标签: android firebase firebase-realtime-database

我正在使用此方法将数据存储在我的Firebase数据库中:

首先,我将所有数据存储在一个名为SubjectDataModel的模型类中, 然后我从Firebase数据库中获得了推键。

然后我将值设置为该特定键。

这是我的代码:

SubjectDataModel:

public class SubjectDataModel {

    public String id;
    public String dbName;
    public String subName;
    public String tagline;
    public int preference;

    public SubjectDataModel()
    {

    }

    public SubjectDataModel(String id, String dbName, String subName, String tagline, int preference) {
        this.id = id;
        this.dbName = dbName;
        this.subName = subName;
        this.tagline = tagline;
        this.preference = preference;
    }
}

然后,我使用以下代码将其推送到数据库,然后我还将密钥ID存储在本地。

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Data");
String id = ref.push().getKey();
SubjectDataModel newSub = new SubjectDataModel(id, txt_dbName, txt_subName, txt_tagline, txt_preference);
ref.child(id).setValue(newSub);

现在想象一下,稍后,我想更新此数据, 因此,我存储了密钥ID,因此我可以访问它,我也已经在本地编辑了所有其他数据,因此,现在如果我用该数据创建SubjectDataModel对象,然后再次对存储的ID做ref.child(id).setValue(newSub);,数据要更新吗?还是有其他方法可以这样做?

2 个答案:

答案 0 :(得分:2)

updateChildren()是您要寻找的方法,请参阅此文档Firebase Read and Write Data on Android

这是文档中的一个示例...

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

答案 1 :(得分:0)

好的,所以我尝试了这一点,并且效果很好,就像我期望的那样。不需要我使用地图或其他任何东西。更新数据的最简单方法。

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Data");
SubjectDataModel newSub = new SubjectDataModel(idForUpdate, txt_dbName, txt_subName, txt_tagline, txt_preference);
ref.child(idForUpdate).setValue(newSub);

因此,基本上,在这里,我用所需的数据创建了对象,并将其推回与在Firebase数据库中创建节点的ID相同的ID,因此它使用新值更新了该节点。