当我在 Firebase 实时数据库中调用 push() 时重复 child
Duplicate child when i call push() in Firebase Realtime Database
我正在尝试从 Firebase 实时数据库检索数据并将此数据添加到列表视图。当我调用 push() 时,firebase 会生成两个 children(一个在另一个里面),它们具有相同的唯一键。这是我的数据库的结构:
database
我就是这样保存数据的:
RunningSession runningSession = new RunningSession(date, activityTime, pace, timeElapsed,
finalDistance, image, tipe);
DatabaseReference reference = databaseReference.child("users").child(userUid).child("activities").push();
Map<String, Object> map = new HashMap<>();
map.put(reference.getKey(),runningSession);
reference.updateChildren(map);
这是我检索数据的方式(导致空指针异常):
DatabaseReference reference = databaseReference.child("users").child(userId).child("activities");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.clear();
for (DataSnapshot snpshot : snapshot.getChildren()) {
RunningSession run = snpshot.getValue(RunningSession.class);
list.add(run);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
ListViewAdapter adapter = new ListViewAdapter(this, list);
ListView activityItems = (ListView) findViewById(R.id.activityList);
activityItems.setAdapter(adapter);
您收到了重复的推送 ID,因为您将它们添加到参考中两次。如果您只需要一个,那么只需使用以下代码行:
RunningSession runningSession = new RunningSession(date, activityTime, pace, timeElapsed, finalDistance, image, tipe);
DatabaseReference reference = databaseReference.child("users").child(userUid).child("activities");
String pushedId = reference.push().getKey();
reference.child(pushedId).setValue(runningSession);
阅读代码可保持不变
我正在尝试从 Firebase 实时数据库检索数据并将此数据添加到列表视图。当我调用 push() 时,firebase 会生成两个 children(一个在另一个里面),它们具有相同的唯一键。这是我的数据库的结构:
database
我就是这样保存数据的:
RunningSession runningSession = new RunningSession(date, activityTime, pace, timeElapsed,
finalDistance, image, tipe);
DatabaseReference reference = databaseReference.child("users").child(userUid).child("activities").push();
Map<String, Object> map = new HashMap<>();
map.put(reference.getKey(),runningSession);
reference.updateChildren(map);
这是我检索数据的方式(导致空指针异常):
DatabaseReference reference = databaseReference.child("users").child(userId).child("activities");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
list.clear();
for (DataSnapshot snpshot : snapshot.getChildren()) {
RunningSession run = snpshot.getValue(RunningSession.class);
list.add(run);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
ListViewAdapter adapter = new ListViewAdapter(this, list);
ListView activityItems = (ListView) findViewById(R.id.activityList);
activityItems.setAdapter(adapter);
您收到了重复的推送 ID,因为您将它们添加到参考中两次。如果您只需要一个,那么只需使用以下代码行:
RunningSession runningSession = new RunningSession(date, activityTime, pace, timeElapsed, finalDistance, image, tipe);
DatabaseReference reference = databaseReference.child("users").child(userUid).child("activities");
String pushedId = reference.push().getKey();
reference.child(pushedId).setValue(runningSession);
阅读代码可保持不变