Получение данных из БД Firebase Realtime

Это моя база данных Firebase:

Получение данных из БД Firebase Realtime

Это мой код для получения данных в виде списка, я хочу получить все данные из 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());
        }
    });

Я не получаю данные от этого

Разве это не должно быть postSnapshot.child("Tehsil_Hin") вместо snapshot.child("Tehsil_Hin")?

André Kool 13.09.2018 16:27

Используйте это для справки: firebase.google.com/docs/database/admin/…

xaif 13.09.2018 16:31

@KENdi, пожалуйста, не одобряйте правку, которая не исправляет все (например, орфографию в названии) и даже добавляет еще пару орфографических ошибок.

André Kool 13.09.2018 16:55

Привет, @ user3857903, пометьте ответ как правильный, так как это помогает людям при переполнении стека задавать похожие вопросы, и я был бы признателен за это. Ваше здоровье! :)

PradyumanDixit 10.11.2018 07:34
0
4
107
2

Ответы 2

Вы никогда не уведомляете адаптер об обновлении данных, поэтому список не обновляется.

Вам необходимо уведомить адаптер за пределами цикла, предполагая, что цикл действительно введен (пожалуйста, добавьте операторы журнала для дальнейшей отладки)

Вы также должны раскомментировать тело метода ошибки, потому что это также область, в которой вы ничего не видите.

Если вы хотите получить доступ к данным из этих дочерних узлов, вместо использования 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 для отображения данных.

Другие вопросы по теме