2016-11-20 74 views
0

我正在使用Firebase。我的問題是,當我查詢對象然後修改它們時,我的主要UI線程繼續並運行下一個方法。我希望我的主要UI線程等到我的firebase查詢完成後,我在onDataChange中做了所有必要的更改,然後繼續運行我編寫的其他函數。查詢完成後如何運行一個方法?

目前,我剛剛導入了外部庫「Otto」,但我不知道如何使用它,我希望有人可以幫助指導我。

   Firebase cardReference = mRef.child("reference"); 
       cardReference.addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
        //DO STUFF 
        } 
        @Override 
        public void onCancelled(FirebaseError firebaseError) { 

        } 
       }); 
       //Once STUFF is done, run nextMethod() 
       nextMethod(); 
     } 
+0

你爲什麼不使用'nextMethod()''中'onDataChange編輯東西后'Otto'是什麼? pub-sub進行操作。 – adnbsr

回答

0

Firebase以異步方式從數據庫中讀取數據。沒有辦法讓您的應用程序等待,而不會向用戶顯示「應用程序未響應」。

相反,您需要重新構建您的邏輯。不要說「首先加載引用,然後執行下一個方法」,將其改爲「開始加載引用,完成後再執行下一個方法」。在轉換爲代碼:

Firebase cardReference = mRef.child("reference"); 
cardReference.addValueEventListener(new ValueEventListener() { 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // Whenever STUFF is done, run nextMethod() 
     nextMethod(); 
    } 
    public void onCancelled(FirebaseError firebaseError) { 
     throw firebaseError.toException(); 
    } 
}); 

添加的這種方法的優點是nextMethod()現在也被稱爲每當引用數據的變化。在這種情況下更新您的用戶界面是您的用戶一旦注意到就會欣賞的特殊效果之一。

對於一些詳細信息,也閱讀這些:

相關問題