在ListView 中顯示Firebase 資料:對空值進行故障排除
嘗試在ListView 中顯示Firebase 資料時,嘗試擷取時可能會出現問題具體值。如果您在嘗試顯示使用者 ID 和分數時遇到空值,則必須仔細檢查您的程式碼並確保其遵循最佳實踐。
模型類別的 Java 命名約定
影響正確檢索資料的關鍵因素是遵守模型類別的 Java 命名約定。在這種情況下,應修改「Score」模型類別以符合以下約定:
public class Score { private String userId, score; public Score() {} public Score(String userId, String score) { this.userId = userId; this.score = score; } public String getUserId() { return userId; } public String getScore() { return score; } @Override public String toString() { return "Score{" + "userId='" + userId + '\'' + ", score='" + score + '\'' + '}'; } }
資料擷取的非同步性質
所使用的onDataChange() 方法Firebase 中的資料檢索具有非同步性質。這意味著甚至在您嘗試將檢索到的物件(類型為 Score)新增至清單之前就會呼叫它。因此,如果您在 onDataChange() 方法之外存取它,您的清單可能會保持為空。
修改資料擷取程式碼
假設「score」節點是Firebase根目錄的直接子級,您可以如下修改資料擷取程式碼:
使用字串Class
ListView listView = (ListView) findViewById(R.id.list_view); List<String> list = new ArrayList<>(); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, list); listView.setAdapter(arrayAdapter); DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference scoreRef = rootRef.child("score"); ValueEventListener eventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot ds : dataSnapshot.getChildren()) { String userId = ds.child("userId").getValue(String.class); String score = ds.child("score").getValue(String.class); list.add(userId + " / " + score); Log.d("TAG", userId + " / " + score); } arrayAdapter.notifyDataSetChanged(); } @Override public void onCancelled(DatabaseError databaseError) { Log.d(TAG, task.getException().getMessage()); } }; scoreRef.addListenerForSingleValueEvent(eventListener);
使用Score Class
ValueEventListener eventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot ds : dataSnapshot.getChildren()) { Score score = ds.getValue(Score.class); String userId = score.getUserId(); String score = score.getScore(); Log.d("TAG", userId + " / " + score); list.add(score); } arrayAdapter.notifyDataSetChanged(); } @Override public void onCancelled(DatabaseError databaseError) { Log.d(TAG, task.getException().getMessage()); } }; scoreRef.addListenerForSingleValueEvent(eventListener);
透過執行這些調整,您應該能夠在ListView 中成功顯示Firebase數據,檢索使用者 ID 和分數均符合預期。
以上是為什麼在 ListView 中顯示 Firebase 資料時得到空值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!