首頁 > Java > java教程 > 為什麼在 ListView 中顯示 Firebase 資料時得到空值?

為什麼在 ListView 中顯示 Firebase 資料時得到空值?

Mary-Kate Olsen
發布: 2025-01-03 00:51:38
原創
301 人瀏覽過

Why Am I Getting Null Values When Displaying Firebase Data in a ListView?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板