如何再次从firebase数据库中获取数据?

时间:2017-01-21 18:57:44

标签: java android firebase firebase-realtime-database swiperefreshlayout

我的应用程序采用Swipe-To-Refresh布局。

当您在“滑动到刷新”布局中向上滚动时,数据将从互联网刷新。 (对于那些不知道的人)

我的数据来源是Firebase。

在我的应用中,如果用户未连接,则会显示网络错误消息,然后在启用互联网后,它无法获取数据。

如何从我的数据库中再次获取数据。

以下是代码:

protected void onCreate(Bundle savedInstanceState) {

    ...

    mFirebaseDatabase = FirebaseDatabase.getInstance();
    // my database

    mNewsDatabaseReference = LoginActivity.mFirebaseDatabase.getReference()
    .child("data").child("news");
    // my database reference

    // my ChildEventListener
    mNewsChildEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            // my data
            News news = dataSnapshot.getValue(News.class);

            // add the news to the top of my ArrayAdapter
            myAdapter.insert(news, 0);
        }
        @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) {}
    };

    // my OnRefreshListener
    mySwipeRefreshLayout.setOnRefreshListener(
            new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {

                    // what Should I do in here to request the data again?!

                    // I know that I should empty my adapter first then request the data
                    myAdapter.clear();

                }
            }
    );
}

2 个答案:

答案 0 :(得分:5)

使用firebase实时数据库时,无需再次执行请求。一旦数据发生变化,它将自动为您提取数据,并且将调用您的一个侦听器。

每次修改news子节点时都会触发onChildChanged()事件,包括对子节点后代的任何修改。

要启用离线功能,请不要忘记使用setPersistenceEnabled(true)

查看documentation了解详情

答案 1 :(得分:3)

上面的答案最有帮助,但对于如何再次请求数据的问题?!​​

您只需再次附加听众。

但请记住首先分离旧的侦听器,以便数据在适配器中不会出现两次。

以下是代码:

<?php echo substr($_helper->productAttribute ($_product,$_product->getName(),'name'), 0, 19); ?>