#java #android-studio #firebase-realtime-database
# #java #android-studio #firebase-realtime-database
Вопрос:
Ниже приведен код, который добавляет дочерний элемент в разделе «Контакты» по «имени» вместо уникального ключа.
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);
Цель — сохранить контактные данные. Название компании записывается в «имя» и добавляется «Контакты» в качестве дочернего элемента. Но всякий раз, когда я пытаюсь добавить нового пользователя с тем же названием компании, он перезаписывает предыдущую запись новой.
Не могли бы вы помочь мне, как преодолеть эту проблему, чтобы добавить больше пользователей с тем же названием компании?
Ответ №1:
Самый простой способ использовать 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);
Выполнение только одной операции записи более эффективно, но также упростит защиту базы данных в дальнейшем.
Комментарии:
1. Спасибо за ответ. Это работает так, как я хочу. Поскольку я новичок в программировании, мне нужно узнать больше, чтобы писать код более эффективным способом. Теперь возникла проблема с возвратом значения в адаптере firebase recycler. Моя ссылка на базу
mDatabase = FirebaseDatabase.getInstance().getReference().child("Contacts")
данных заключалась в том, что теперь она не выбирает значение, поскольку оно переходит к дочернему «имени», которое меняется. Не могли бы вы сказать мне, как обратиться к возврату значения, чтобы показать его в моем адаптере? Код адаптера приведен ниже2.
FirebaseRecyclerOptions<project> options = new FirebaseRecyclerOptions.Builder<project>().setQuery(mDatabase, project.class).build(); FBRA = new FirebaseRecyclerAdapter<project, ProjViewHolder>(options) { protected void onBindViewHolder(@NonNull ProjViewHolder holder, int position, @NonNull project model) { holder.cpname.setText(model.getCname()); holder.ccname.setText(model.getPcontact();