ホームページ > Java > &#&チュートリアル > Android ListView で Firebase データを効率的に表示するにはどうすればよいですか?

Android ListView で Firebase データを効率的に表示するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-09 21:26:15
オリジナル
216 人が閲覧しました

How to Efficiently Display Firebase Data in an Android ListView?

ListView での Firebase データの表示

開発者が直面する一般的な課題の 1 つは、ListView での Firebase のデータの表示に関するものです。最近、ユーザーがこのトピックに関する質問を投稿し、発生した問題を強調しました。彼らの懸念事項を詳しく掘り下げて、解決策を提供しましょう。

問題

彼らのコードでは、最初はユーザー ID が表示されていましたが、スコアは表示されませんでした。いくつかの変更を加えると、Null 値が残されました。削除またはスペルミスの問題を疑い、彼らは支援を求めました。

問題の解決

提供されたコードを確認したところ、問題はモデル内の 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() メソッドの非同期の性質により、リストが空のままになります。これを解決するには、リスト宣言を onDataChange() 内に移動する必要があります。

非同期動作とデータ取得

onDataChange() の非同期動作を理解することが重要です。方法。この場合、リストにオブジェクトを追加しようとする前でも呼び出されます。したがって、そのメソッドの外でリストを使用しようとすると、空の結果が返されます。

この動作に対処するには、次のコードに示すように、リスト宣言を onDataChange() 内に移動できます。

dbref.addValueEventListener(new com.google.firebase.database.ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                ArrayList<String> list = new ArrayList<>();

                for(DataSnapshot ds :dataSnapshot.getChildren()) {
                    Score Result = ds.getValue(Score.class);
                    String userId = String.valueOf(Result.getUserId());
                    String score = String.valueOf(Result.getScore());
                    list.add(userId);
                    list.add(score);

                }
                adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, list);
                LvRanking.setAdapter(adapter);
            }
ログイン後にコピー

String クラスを使用したデータの表示

String クラスを使用してデータを表示するには、次を使用できます。次のコード:

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 クラスを使用したデータの表示

または、Score クラスを使用してデータを表示するには、次のコードを使用します:

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);
ログイン後にコピー

これらの解決策に従うことで、Firebase データを ListView に正常に表示できるはずです。

以上がAndroid ListView で Firebase データを効率的に表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート