Rumah >Java >javaTutorial >Bagaimana untuk Memaparkan Data Firebase dengan Cekap dalam Android ListView?

Bagaimana untuk Memaparkan Data Firebase dengan Cekap dalam Android ListView?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-09 21:26:15256semak imbas

How to Efficiently Display Firebase Data in an Android ListView?

Memaparkan Data Firebase dalam ListView

Satu cabaran biasa yang dihadapi oleh pembangun berkaitan dengan memaparkan data daripada Firebase dalam ListView. Baru-baru ini, seorang pengguna menyiarkan soalan tentang topik ini, menyerlahkan isu yang dihadapi. Mari kita selami kebimbangan mereka dan berikan penyelesaian.

Isunya

Kod mereka pada mulanya memaparkan ID Pengguna tetapi gagal menunjukkan skor. Apabila membuat beberapa perubahan, mereka dibiarkan dengan nilai nol. Mengesyaki isu pemadaman atau salah ejaan, mereka meminta bantuan.

Mengatasi Masalah

Setelah menyemak kod yang disediakan, isu itu berpunca daripada tidak mengikuti Konvensyen Penamaan Java dalam model kelas. Kelas hendaklah dinamakan "Skor" dan diformatkan seperti berikut:

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 + '\'' +
                '}';
    }
}

Selain itu, sifat tak segerak kaedah onDataChange() menyebabkan senarai kekal kosong. Untuk membetulkan perkara ini, perisytiharan senarai harus dialihkan ke dalam onDataChange().

Gelagat Tak Segerak dan Pendapatan Data

Adalah penting untuk memahami tingkah laku tak segerak onDataChange() kaedah. Dalam kes ini, ia dipanggil walaupun sebelum cuba menambah objek pada senarai. Akibatnya, sebarang percubaan untuk menggunakan senarai di luar kaedah itu akan menghasilkan hasil kosong.

Untuk menangani tingkah laku ini, pengisytiharan senarai boleh dialihkan ke dalam onDataChange(), seperti yang dilihat dalam kod berikut:

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

Memaparkan Data Menggunakan Kelas Rentetan

Untuk memaparkan data menggunakan Kelas rentetan, anda boleh menggunakan kod berikut:

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

Memaparkan Data Menggunakan Kelas Skor

Sebagai alternatif, untuk memaparkan data menggunakan kelas Skor, gunakan yang berikut kod:

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

Dengan mengikuti penyelesaian ini, anda sepatutnya berjaya memaparkan data Firebase dalam ListView.

Atas ialah kandungan terperinci Bagaimana untuk Memaparkan Data Firebase dengan Cekap dalam Android ListView?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn