Обновление Firebase делает новый с тем же идентификатором, кроме последнего символа
Я использую этот код для обновления данных Firebase, но он делает новый. Я пробовал много кода, и он дозирует то же самое, что и новый, с тем же ключом, кроме последнего символа.
Я использовал это как сайт Firebase, но он не работает. Я создал новый, и в следующий раз его обновление:
Map<String, Object> childUpdate = new HashMap<>();
childUpdate.put("/masjeds/" + masjed.getId(), masjed.toMap());
reference.updateChildren(childUpdate);
и этот код сделал то же самое
final FirebaseDatabase database = FirebaseDatabase.getInstance();
masjeds = database.getReference("masjeds");
reference.child(masjed.getId()).setValue(masjed, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
// Toast.makeText(MyMasjedsActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
Масский класс - это простой Java-объект
public class Masjed {
private String userID;
private String id;
private String name;
private String address;
private String phone;
private boolean matloopEmam;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public boolean isMatloopEmam() {
return matloopEmam;
}
public void setMatloopEmam(boolean matloopEmam) {
this.matloopEmam = matloopEmam;
}
public Masjed(String name, String address, String phone) {
this.name = name;
this.address = address;
this.phone = phone;
}
public Masjed() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Map<String, Object> toMap() {
Map<String, Object> map = new HashMap<>();
map.put("name", name);
map.put("address", address);
map.put("phone", phone);
map.put("id", id);
map.put("userID", userID);
return map;
}
}
![введите описание изображения здесь]()
id - проблема, которую я предполагал, что push.getkey и поместить ее как ID
то использование push.setValue(masjed) будет использовать тот же ключ
получилось, что не всегда происходит изменение ключа, когда я использую его dosnt, и поэтому он создает новый ответ, который помог мне ответить Честер
Ответы
Ответ 1
Я надеюсь, что это поможет, использовал его в моем проекте для домашних животных (это не очищает решение, но оно работает):
masjeds = database.getReference("masjeds");
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
masjedKey = dataSnapshot1.getKey(); // This is a member variable
masjed = dataSnapshot1.getValue(Masjed.class); // This is a member variable
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
masjeds.orderByChild("id").equalTo(masjed.getId()).addValueEventListener(listener);
//Use your Map to update each value this is just an example
masjeds.child(masjedKey).child("name").setValue("John"); //you can add event listener if you want to see if it completed, but it works without the events
Ответ 2
final FirebaseDatabase database = FirebaseDatabase.getInstance();
masjeds = database.getReference("masjeds");
// ** what is reference here? This must be masjeds **
reference.child(masjed.getId()).setValue(masjed, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
// Toast.makeText(MyMasjedsActivity.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
Я добавил свои выводы в качестве комментария выше, который я нашел в качестве подозреваемого, возможно, вы указываете на неправильную ссылку. Вы ориентируетесь на reference
node, а masjeds
node не используется. Пожалуйста, проверьте его и для лучшего понимания поместите базу данных firebase.
Ответ 3
Вы можете попробовать что-то вроде этого, чтобы обновить дочерние элементы определенного node с содержимым вашего HashMap:
// get a reference to the node that you want to update
DatabaseReference masjedToUpdate = masjeds.child(masjed.getId());
// pass your hashmap to its "updateChildren" method
masjedToUpdate.updateChildren(masjed.toMap());
Обратите внимание, что этот подход по-прежнему немного нестандартен по нескольким причинам. Но он должен выполнить эту работу для вас.
Ответ 4
Обновление FireBase с помощью
mDatabase.child("masjed").child("the_key_of_child_you_want_to_update").setValue(masjedObject);
будет работать нормально, он не создаст нового дочернего
Вы можете проверить My demo here