【问题标题】:Why does Firebase not get the data?为什么 Firebase 无法获取数据?
【发布时间】:2019-02-13 15:21:58
【问题描述】:

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 database structure

【问题讨论】:

  • 你真的给那个孩子设置了什么吗?
  • fruitIds 的孩子是另一个fruitIds。如果你这样做dataSnapshot.child("dictionary").child("fruitIds").child("fruitIds").getValue(DictionaryIDs.class);会发生什么?
  • @TheWanderer 什么都没有。它仍然不起作用。并获得com.google.firebase.database.DatabaseException: Can't convert object of type java.util.ArrayList to type com.example.asuper.mluvitslova.DictionaryIDs

标签: java android database firebase-realtime-database


【解决方案1】:

在最后一个fruitIdschild 下,没有DictionaryIDs 对象,有简单的字符串。要获取所有这些 id,您需要使用 getChildren() 方法循环通过 DataSnapshot 对象,如下所示:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2012-06-06
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多