2017-09-02 96 views
1

正如標題所述,我使用的是Firebase實時數據庫,並啓用了持久性Android的Firebase數據庫 - 使用持久性在脫機時編寫事件

由於指南中指出,

通過啓用持久性,任何數據,雖然網上一直持續到磁盤,可脫機使用的火力地堡實時數據庫客戶端會同步,即使用戶或操作系統重新啓動應用程序。這意味着您的應用可以像使用存儲在緩存中的本地數據在線一樣工作。 聽衆回調將繼續觸發本地更新

雖然出現這種情況與ValueEventListeners和每次讀的聽衆,我不能找到一種方法,使其與寫入操作正常工作。 這是從我的數據庫輔助類的代碼段:

DatabaseReference userRef = root.child("users").child(user.getUid()); 
    userRef.setValue(user).addOnSuccessListener(new OnSuccessListener<Void>() { 
     @Override 
     public void onSuccess(Void result) { 
      //handle success event 
     } 
    }).addOnFailureListener(new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception e) { 
      //handle failure event 
     } 
    }); 

即使啓用持久性,應使數據庫的行爲的「反應性時尚」,這兩個監聽器將不會觸發,直到該數據庫上線再次並最終將更新推送到服務器。

這實際上並不是我所希望的,因爲我希望在數據緩存到本地時觸發事件。 我知道我可以簡單地忽略事件並假裝成功,但我想知道,我錯過了什麼嗎?一旦數據被緩存,是否有辦法觸發事件?

回答

1

當數據寫入服務器上的數據庫時,觸發寫操作的onSuccess偵聽器。

當數據寫入本地隊列時,沒有觸發事件。

+0

好吧,看起來我不得不假裝它成功了!除了忽略結果之外,有沒有可以使用的解決方法?我在添加偵聽器之前嘗試檢查連接狀態,但是如果在連接它們之後我失去了連接(並且連接偵聽器需要一段時間來更新狀態),它將像以前一樣運行,等待連接恢復。 。我無法找到一種方法來刪除這些聽衆。 –

+0

我不知道[你想要完成什麼]((http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),這就是爲什麼我回答系統如何行爲方式。 –