ホームページ >Java >&#&チュートリアル >ListView で Firebase データを表示すると Null 値が表示されるのはなぜですか?

ListView で Firebase データを表示すると Null 値が表示されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-03 00:51:38278ブラウズ

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

ListView での Firebase データの表示: Null 値のトラブルシューティング

ListView で Firebase データを表示しようとすると、取得しようとすると問題が発生する可能性があります特定の値。ユーザー ID とスコアの両方を表示しようとしたときに null 値が発生した場合は、コードを注意深くレビューし、ベスト プラクティスに従っていることを確認することが重要です。

モデル クラスの Java 命名規則

データの適切な取得に影響を与える重要な要素の 1 つは、モデル クラスの Java 命名規則に従うことです。この場合、「スコア」モデル クラスは次の規則に一致するように変更する必要があります:

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 でのデータ取得には非同期の性質があります。これは、取得したオブジェクト (スコア型) をリストに追加しようとする前でも呼び出されることを意味します。その結果、onDataChange() メソッドの外部でリストにアクセスすると、リストが空のままになる可能性があります。

データ取得コードの変更

「スコア」ノードがFirebase ルートの直接の子である場合は、データ取得コードを次のように変更できます。

文字列クラスの使用

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);

スコア クラスの使用

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);

これらの調整に従って、ユーザー ID とスコアの両方を取得して、ListView に Firebase データを正常に表示できるはずです。

以上がListView で Firebase データを表示すると Null 値が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。