如何避免firebase数据库子值覆盖问题?

jm81lzqq  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(458)

下面给出的代码在“contacts”下以“name”而不是“unique key”添加子项。

String name = CName.getText().toString().trim();
DatabaseReference mDbRef = mDatabase.getReference().child("Contacts").child(name);
mDbRef.child("cname").setValue(dCName);
mDbRef.child("pcontact").setValue(dPContact);
mDbRef.child("pdesig").setValue(dPDesig);
mDbRef.child("pemail").setValue(dPEmail);
mDbRef.child("pmobile").setValue(dPMobile);

目的是存储联系方式。公司名称在“name”中捕获,并添加“contacts”作为子级。但是,每当我尝试以相同的公司名称添加一个新的人员时,它就会用新的名称覆盖以前的条目。
你能帮助我如何克服这个问题,使更多的人在同一个公司名称?

v1uwarro

v1uwarro1#

最简单的使用方法 push() 为用户生成新的唯一位置。

String name = CName.getText().toString().trim();
DatabaseReference mDbRef = mDatabase.getReference().child("Contacts").child(name).push();
mDbRef.child("cname").setValue(dCName);
mDbRef.child("pcontact").setValue(dPContact);
mDbRef.child("pdesig").setValue(dPDesig);
mDbRef.child("pemail").setValue(dPEmail);
mDbRef.child("pmobile").setValue(dPMobile);

不相关的,我建议将所有值合并到一个Map中,并调用 setValue 只有一次:

String name = CName.getText().toString().trim();
DatabaseReference mDbRef = mDatabase.getReference().child("Contacts").child(name).push();
Map<String, Object> values = new HashMap<>();

values.put("cname", dCName);
values.put("pcontact", dPContact);
values.put("pdesig", dPDesig);
values.put("pemail", dPEmail);
values.put("pmobile", dPMobile);

mDbRef.setValue(values);

只进行一次写操作效率更高,但也更容易保护数据库。

相关问题