Firebase返回的数据不存在。我该如何解决?

时间:2019-02-05 14:54:25

标签: java android firebase firebase-realtime-database

我有三个对象(Book,Listicle_modell和Feed_modell),我想在对象列表中进行检索。 但是我正在从Firebase数据库获取不存在的数据。

我的Firebase结构:

-userid 
 - key
   -name2: Nova Conta
   -title: The best music in the world;
   -thumbnail: url;

enter image description here **我只有一个孩子,为什么我让Firebase给我三个对象? **。

在我的数据库中,我只有一个孩子,其值与Feed_modell匹配,但是我从书和书目中获取布局,或者没有在数据库中将这些对象(与book.class和listicle匹配的键)作为图片。节目: enter image description here

enter image description here

问题是这样的:**这两个没有标题,没有缩略图,没有名称,只写了一个视图的图像被调用,但它们不存在测试广告运行正常

这是我的Android代码:

    dbforFeed = FirebaseDatabase.getInstance().getReference("feedPosts").child(feedReceivingKey);

    dbforFeed.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            Feed_modell post = dataSnapshot.getValue(Feed_modell.class);
            Book book = dataSnapshot.getValue(Book.class);
            Listicle_modell lm = dataSnapshot.getValue(Listicle_modell.class);

            feedList.addAll(Arrays.asList(post, book, new all_modell("ca-app-pub-4452407171570296~9731286762"), lm));

            recyclerViewFeedAdapter.notifyDataSetChanged();
        }

        @Override
        public void onChildChanged( DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved( DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved( DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled( DatabaseError databaseError) {

        }
    });

这是我的数据库结构

enter image description here

1 个答案:

答案 0 :(得分:0)

使用NoSQL数据库时的一种重要做法是在节点(feedPosts)下具有相同类型的对象。根据您的评论,我了解到:

  

Feed_modell有。 Just Feed_modell具有这些字段。

现有对象的类型为Feed_modell。正如我在您的代码中看到的那样,您试图从同一个dataSnapshot对象中获取三个不同的对象Feed_modellBookListicle_modell,这是不正确的。单个dataSnapshot可以转换为单个对象类型。要解决此问题,请进行以下更改:

List<Listicle_modell> feedList = new ArrayList<>();
//Feed_modell post = dataSnapshot.getValue(Feed_modell.class);
//Book book = dataSnapshot.getValue(Book.class);
Listicle_modell lm = dataSnapshot.getValue(Listicle_modell.class);
feedList.add(lm);
recyclerViewFeedAdapter.notifyDataSetChanged();

确保适配器的类型也为Listicle_modell