首页 > 解决方案 > 为什么 Firebase 无法获取数据?

问题描述

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 代码

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 数据库结构

标签: javaandroiddatabasefirebase-realtime-database

解决方案


在最后一个fruitIds孩子下,没有DictionaryIDs对象,只有简单的字符串。要获取所有这些 id,您需要使用如下方法遍历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 中的结果将是所有这些 id。


推荐阅读