Это моя база данных Firebase:
Это мой код для получения данных в виде списка, я хочу получить все данные из Tehsil_hin и Tid с определенным идентификатором в двух разных массивах.
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("Tehsil");
Query query = myRef.orderByChild("DID").equalTo(did);
query.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot postSnapshot: snapshot.getChildren())
{
areas.add(snapshot.child("Tehsil_Hin").getValue(String.class));
areasid.add(snapshot.child("TID").getValue(int.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
//System.out.println("The read failed: " + firebaseError.getMessage());
}
});
Я не получаю данные от этого
Используйте это для справки: firebase.google.com/docs/database/admin/…
@KENdi, пожалуйста, не одобряйте правку, которая не исправляет все (например, орфографию в названии) и даже добавляет еще пару орфографических ошибок.
Привет, @ user3857903, пометьте ответ как правильный, так как это помогает людям при переполнении стека задавать похожие вопросы, и я был бы признателен за это. Ваше здоровье! :)
Вы никогда не уведомляете адаптер об обновлении данных, поэтому список не обновляется.
Вам необходимо уведомить адаптер за пределами цикла, предполагая, что цикл действительно введен (пожалуйста, добавьте операторы журнала для дальнейшей отладки)
Вы также должны раскомментировать тело метода ошибки, потому что это также область, в которой вы ничего не видите.
Если вы хотите получить доступ к данным из этих дочерних узлов, вместо использования query
вы можете просто использовать DatabaseReference
, а с помощью orderByChild()
и equalTo()
можно получить доступ к данным, которые имеют только нужное вам значение.
В коде это выглядит примерно так:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("Tehsil");
// specificTID is the value which you want to compare to the value stored in database
rootRef.orderByChild("TID").equalTo(specificTID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot data: dataSnapshot.getChildren()){
// use array1.add to store value in your arrayList
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Теперь вам нужно обновить значение для ArrayAdapter
и настроить его для вашего listView
, чтобы иметь возможность отображать данные.
ArrayAdapter adapter = new ArrayAdapter(Main2Activity.this, android.R.layout.simple_list_item_1, array);
listView.setAdapter(adapter);
Вы можете сделать это с обоими своими дочерними элементами и сохранить значения в разных массивах. Вы также можете использовать другой listViews
для отображения данных.
Разве это не должно быть
postSnapshot.child("Tehsil_Hin")
вместоsnapshot.child("Tehsil_Hin")
?