簡體   English   中英

如何再次從firebase數據庫中獲取數據?

[英]How to ask data from firebase database again?

我正在使用具有“ 刷卡到刷新”布局的應用程序。

在“滑動到刷新”布局中向上滾動時,數據將從Internet刷新。 (對於那些不知道的人)

我的數據源是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();

                }
            }
    );
}

使用firebase實時數據庫時,無需再次執行請求。 一旦數據發生變化,它將自動為您獲取數據,並且將調用其中一個偵聽器。

每次修改news子節點時都會觸發onChildChanged()事件,包括對子節點后代的任何修改。

要啟用脫機功能,請不要忘記使用setPersistenceEnabled(true)

查看文檔以獲取更多信息

上面的答案是最有幫助的,但對於如何再次請求數據的問題?!

您只需再次附加偵聽器即可。

但請記住首先分離舊的偵聽器,以便數據不會在適配器中出現兩次。

這是代碼:

    mNewsSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            myAdapter.clear();
            mNewsDatabaseReference.removeEventListener(mNewsChildEventListener);
            mNewsDatabaseReference.addChildEventListener(mNewsChildEventListener);
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM