我正在嘗試從 Firebase 實時資料庫中檢索資料并將這些資料添加到串列視圖中。當我呼叫 push() 時,firebase 使用相同的唯一鍵生成兩個子項(一個在另一個子項內)。這是我的資料庫結構:
資料庫
這就是我保存資料的方式:
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);
uj5u.com熱心網友回復:
您收到重復的推送 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);
閱讀代碼可能保持不變。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/385229.html
