2017-08-04 79 views
-1

我正在尋找一種方法來在每個活動中使用一個ChildEventListener來收聽我數據庫中的特定位置。Android:通過我的應用程序使用一個Firebase ChildEventListener

我有一個購物應用程序,我需要通過應用程序監聽用戶的訂單狀態以顯示警報並在本地保存數據。

我有2個想法在腦海:

  1. 我想到了安裝和拆卸的OnResume()
    ActivityOnPause()聽衆,但代碼將在 每Activity因爲被複制它做同樣的工作。
  2. 我想到了一個監聽器連接到MainActivity,然後發送 廣播給其他活動,但這種失敗,原因是MainActivity被破壞

-

什麼是聽一個最佳實踐節點並保持應用程序同步?

回答

0

使用多個偵聽器時,Firebase中沒有問題,即使它是相同的偵聽器。只要您根據您的活動的生命週期移除聽衆,Firebase將幾乎完美地處理聽衆。

你的類應該是這樣的:

public class HelperClass extends Application { 
    private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference(); 

    public static verifyStatus() { 
     databaseReference.addChildEventListener() /* ... */ 
    } 
} 

您需要相應地刪除監聽到你的活動的生命週期。如果您在onStart中添加了聽衆,則必須在onStop中將其刪除。如果您在onResume中添加了聽衆,則必須在中將其刪除。如果您已在onCreate中添加了聽衆,則必須將其刪除至onDestroy。但請記住,並不總是調用onDestroy。

希望它有幫助。

+0

你說得對,但我打算集中工作,所以稍後修改代碼很容易。 – Khaled

+2

在這種情況下,您可以創建一個'HelperClass',在其中創建一個可以在您需要的每個活動中重用的方法。 –

+0

那很簡單...聽起來像一個想法,但如果我在每個活動中創建監聽器,不會有延遲嗎? – Khaled

0

嘗試這種方式創建一個和內部創建方法要這樣:

public class firebaseutils { 

public static void check(){ 

    } 

} 

並稱之爲,你想要的,這樣的:

firebaseutils.check(); 
0

最近我解決了同樣的問題。因此,製作ChildEventListener的處理程序類,並且它具有FirebaseDatabase,FirebaseAuth和其他Firebase服務的單個實例。該類與此片段相同:

public class ShopHandler implements ChildEventListener { 

    private static ShopHandler current = null; 
    private DatabaseReference databaseReference; 

    private ShopHandler() {} 

    public synchronized static void attach() { 
     if (current = null) { 
      current = new ShopHandler(); 
      databaseReference = FirebaseDatabase.getInstance().getReference("data/yournode"); 
      databaseReference.addChildEventListener(this); 
     } 
    } 

    public syncrhonized static void detach() { 
     // remove listeners and set current as null 
    } 
    // implements all methods about ChildEventListener 

} 
相關問題