Rumah >Java >javaTutorial >Bagaimana untuk Memaparkan Data Firebase dengan Cekap dalam 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!