我有一个函数,应该添加一个房间(自定义对象)到我的数据库:Java - Android Studio
public void addRoom(Room room) {
this.addRoomToList(room);
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("/users/" + FirebaseAuth.getInstance().getUid() + "/rooms");
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
ArrayList<HashMap<String, Object>> data = (ArrayList<HashMap<String, Object>>)dataSnapshot.getValue();
if (data == null){
data = new ArrayList<>();
}
data.add(room.getHashMapFromRoom());
// Save the updated subarray to Firebase
dbRef.setValue(data);
dbRef.removeEventListener(this);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.w(TAG, "onCancelled", databaseError.toException());
dbRef.removeEventListener(this);
}
});
}
该函数接受一个房间参数,检索当前房间数组,将新房间添加到数组,并将数组添加到数据库。但是,它不会工作,第一次它是好的,将上传和更新成功,但当第二次调用它将擦除房间(因为数据库中的数据为空,它将创建一个新的数组)。我该怎么解决?
注意:我还检查了这个rooms参数的父参数,这意味着数据库中有更高的层次结构,我能够读取它并获得一个散列表,但是特定的rooms数组没有出现在那里。此外,我确实检查了,我在数据库的规则部分有读/写权限。
1条答案
按热度按时间2vuwiymt1#
经过几个小时的调试,我想这一定是因为我一个接一个地调用这个函数,所以数组没有时间在数据库中更新。我写了这个,我知道这不是理想的,但它的工作...
下面是更新后的函数: