Data tidak diambil dari database Firebase
Saya memiliki database Firebase seperti yang ditunjukkan pada gambar. Saya mencoba mengambil data berdasarkan beberapa kondisi tetapi tidak menunjukkan hasil.
DbRef2 =FirebaseDatabase.getInstance().getReference().child("Notification");
DbRef2.child("45961").orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
Toast.makeText(getApplicationContext(),"hello",Toast.LENGTH_SHORT).show();
Notification notf = dataSnapshot.getValue(Notification.class);
Toast.makeText(getApplicationContext(),"hai"+notf.getFromId(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Tidak ada pertunjukan di toast itu. Saya juga mencoba equalTo daripada startAt. tapi tidak ada hasil.
Jawaban
Ada empat masalah dalam kode Anda. Yang pertama adalah kueri yang Anda gunakan. Jika Anda ingin mendapatkan hasil berdasarkan suatu kondisi, harap ubah kueri berikut:
DbRef2.child("45961").orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(/* ... */);
Untuk:
DbRef2.orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(/* ... */);
Tidak perlu .child("45961")menelepon, karena Anda perlu mengulang hasil.
Masalah kedua adalah Anda mendapatkan DataSnapshotobjek sebagai argumen tetapi Anda tidak mengulang untuk mendapatkan hasilnya. Untuk benar-benar mendapatkan hasil, Anda harus menggunakan kode berikut:
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Toast.makeText(getApplicationContext(),"hello",Toast.LENGTH_SHORT).show();
Notification notf = ds.getValue(Notification.class);
Toast.makeText(getApplicationContext(),"hai"+notf.getFromId(),Toast.LENGTH_SHORT).show();
}
}
}
Masalah ketiga adalah kenyataan bahwa Anda tidak memeriksa potensi kesalahan. Anda juga dapat mempertimbangkan untuk menggunakan:
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}
Masalah keempat terletak pada kenyataan bahwa Anda menggunakan nama yang dimulai dengan huruf besar. Untuk itu, saya sarankan Anda melihat jawaban saya dari postingan berikut ini:
Firebase Android ListView tidak ditampilkan
Atau:
cara membaca sub-koleksi firestore dan meneruskannya ke FirestoreRecyclerOptions
Jika kolom di kelas Anda adalah huruf kecil.
Ubah ini:
DbRef2.child("45961").orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(new ValueEventListener() {
ke dalam ini:
DbRef2.orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(new ValueEventListener() {
Jika Anda ingin menggunakan FromIdbagian dalam orderByChild()maka Anda tidak perlu mengaksesnyachild("45961")