Как получить массив строк из базы данных Firebase в реальном времени - PullRequest
0 голосов
/ 03 ноября 2018

Firebase Realtime database structure

databaseReference = FirebaseDatabase.getInstance().getReference("/sample");

databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Log.d(TAG, "onDataChange: dataSnapshot "+dataSnapshot.getValue());
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

Я новичок в разработке приложений для Android и Firebase, а также. Я получаю данные с узла sample и получаю значение DataSnapshot, как показано ниже.

{size=[Small, Large, Ex-Large], type=[Type 1, Type 2], color=[Red, Green, Blue], category=[T-Shirt, Jeans, Sweater]}

нужна помощь, любое предложение будет оценено.

Спасибо

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Примерно так:

databaseReference = FirebaseDatabase.getInstance().getReference("/sample");

databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot sampleSnapshot: dataSnapshot.getChildren()) {
            Log.d(TAG, "onDataChange: sampleSnapshot "+sampleSnapshot.getKey()+" = "+sampleSnapshot.getValue());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }
});

Разница в том, что в моем ответе я зацикливаюсь на dataSnapshot.getChildren(), чтобы получить каждый отдельный снимок образца. Вызов sampleSnapshot.getValue() должен вернуть List.

0 голосов
/ 24 марта 2019

Firebase не имеет встроенной поддержки массивов. Если вы храните массив, он действительно сохраняется как «объект» с целыми числами в качестве имен ключей.

// мы отправляем это

['hello', 'world']

// Firebase хранит это

{0: 'hello', 1: 'world'}

Лучшие практики: массивы в базе Firebase

// ПОПРОБУЙТЕ

@Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            youNameArray = new ArrayList<>();

            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                String data = snapshot.getValue(String.class);
                youNameArray.add(data);
            }
            Log.v("asdf", "First data : " + youNameArray.get(0));
        }
0 голосов
/ 03 ноября 2018

Чтобы получить значения отдельно, вы можете использовать код, подобный этому:

databaseReference.child("category").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                   for (int i=0;i<3;i++) {
                     // category is an ArrayList you can declare above
                        category.add(dataSnapshot.child(String.valueOf(i)).getValue(String.class));

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) { // Do something for this

                }
            });

Аналогичным образом вы можете добавить значения других узлов в другие списки ArrayLists, просто изменив значение Childs в этом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...