Menunjukkan Data Firebase dalam ListView: Menyelesaikan Masalah Nilai Null
Semasa cuba memaparkan data Firebase dalam ListView, isu boleh timbul apabila cuba mendapatkan semula nilai tertentu. Jika anda menghadapi nilai nol semasa cuba memaparkan kedua-dua ID pengguna dan skor, adalah penting untuk menyemak kod anda dengan teliti dan memastikan ia mengikut amalan terbaik.
Konvensyen Penamaan Java untuk Kelas Model
Satu faktor penting yang mempengaruhi pengambilan semula data yang betul ialah mematuhi konvensyen penamaan Java untuk kelas model anda. Dalam kes ini, kelas model "Skor" harus diubah suai untuk memadankan konvensyen ini:
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 + '\'' + '}'; } }
Sifat Tak Segerak Pengambilan Data
Kaedah onDataChange() yang digunakan untuk mendapatkan semula data dalam Firebase mempunyai sifat tak segerak. Ini bermakna ia digunakan walaupun sebelum anda cuba menambah objek yang diambil (daripada jenis Skor) pada senarai. Akibatnya, senarai anda mungkin kekal kosong jika anda mengaksesnya di luar kaedah onDataChange().
Mengubah suai Kod Pengambilan Data
Andaikan nod "skor" ialah anak langsung dari akar Firebase anda, anda boleh mengubah suai kod pengambilan data anda sebagai berikut:
Menggunakan Kelas Rentetan
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);
Menggunakan Kelas Skor
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 pelarasan ini, anda harus berjaya memaparkan data Firebase dalam ListView anda, mendapatkan kedua-dua ID pengguna dan skor sebagai dimaksudkan.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Nilai Null Apabila Memaparkan Data Firebase dalam ListView?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!