我正在使用此方法将数据存储在我的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);
,数据要更新吗?还是有其他方法可以这样做?
答案 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,因此它使用新值更新了该节点。