Почему Firebase не получает данные? - PullRequest
0 голосов
/ 08 сентября 2018

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

fRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            ids = dataSnapshot.child("dictionary").child("fruitIds").getValue(DictionaryIDs.class);

        }

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

        }
    });

DictionaryIds.class code

package com.example.asuper.mluvitslova;

import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;

public class DictionaryIDs {

    private ArrayList<String> fruitIds = new ArrayList<>();

    public DictionaryIDs() {

    }

    public DictionaryIDs(ArrayList<String> fruitIds) {
        this.fruitIds = fruitIds;
    }


    public void addFruitId(String id){
        fruitIds.add(id);
    }

    public ArrayList<String> getFruitIds(){
        return fruitIds;
    }

    public void setFruitIds(ArrayList<String> fruitIds){
        this.fruitIds = fruitIds;
    }

}

А в логе просто НИЧЕГО

Этот код должен просто получить мне файл DictionaryIds.class, но на самом деле Firebase просто возвращает мне нулевой объект.

Структура базы данных Firebase

1 Ответ

0 голосов
/ 09 сентября 2018

Под последним fruitIds дочерним элементом нет DictionaryIDs объектов, есть простые строки. Чтобы получить все эти идентификаторы, вам нужно перебрать объект DataSnapshot, используя метод getChildren(), например:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference fruitRef = rootRef.child("dictionary").child("fruitIds").child("fruitIds");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String id = ds.getValue(String.class);
            Log.d(TAG, id);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
fruitRef.addListenerForSingleValueEvent(valueEventListener);

Результатом в вашем logcat будут все эти идентификаторы.

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