Получить дочерний массив в базе данных firebase для приложения Android

Я хотел бы знать, как получить данные Пожалуйста помоги! Спасибо.

Вот моя структура базы данных в базе файлов.

Получить дочерний массив в базе данных firebase для приложения Android

 mDatabase = FirebaseDatabase.getInstance().getReference().child("chinese");
    mDatabase.keepSynced(true);

    mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
                Log.v(TAG,""+ childDataSnapshot.getKey()); //displays the key for the node
                Log.v(TAG,""+ childDataSnapshot.child("ingredient").getValue());   //gives the value for given keyname
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Я хотел бы знать, как получить значение (String) каждого ингредиента. Спасибо

Sea Star 30.03.2018 13:15
2
1
1 749
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы использовали приведенный ниже код для чтения базы данных firebase.

 private void initView() {
    mFirebaseInstance = FirebaseDatabase.getInstance();
    mDatabase = mFirebaseInstance.getReference("usersDb/UserTable"); // root node and childNode Name
    mRvData.setLayoutManager(new LinearLayoutManager(this));
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                Log.v(TAG,""+ childDataSnapshot.getKey()); //displays the key for the node
                Log.v(TAG,""+ childDataSnapshot.child("ingredient").getValue());   //gives the value for given keyname
            }
         }


        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
Ответ принят как подходящий
mDatabase = FirebaseDatabase.getInstance().getReference().child("chinese");
mDatabase.keepSynced(true);

mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
                if (childDataSnapshot.child("ingredient").getValue() != null) {
                    ArrayList<String> ingredients = new ArrayList<>();
                    for (DataSnapshot ing : childDataSnapshot.child("ingredient").getChildren()) {
                        ingredients.add(ing.child("ingredient").getValue(String.class));
                    }
                    System.out.println("Gained data: " + ingredients.toString());
                }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

Другой способ - преобразовать значение DataSnapshot в ArrayList:

GenericTypeIndicator<ArrayList<String>> t = new GenericTypeIndicator<ArrayList<String>>() {};
ArrayList<String> ingredients = childDataSnapshot.child("ingredient").getValue(t);

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