2016-05-29 66 views
4

我被困在瞭解使Firebase應用脫機的概念。 按照文件,我們需要調用:Android - Firebase Offline Best Practices

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

但是,我們應該在哪裏打電話呢?是否應該在申請的每項活動中使用?因爲,當我在我的Application類的onCreate()方法中使用這個時,我的應用程序不斷崩潰。

那麼我們應該如何讓我們的應用離線的最佳做法是什麼?

還有一個疑問是上述一個和DatabaseReference.keppSynced(true);

回答

7

setPersistenceEnabled應該再在啓動時調用者之間的差異,您找回您的數據庫中的第一個引用之前。我在打電話給FIRApp.configure()後直接打電話給我。

持久性已啓用允許完全離線保留信息。其中重要的組成部分是離線請求和更新將完成,即使您強制關閉應用程序並重新打開它。如果您正在查找要設置的布爾值的離線訪問權限。

保持同步,用於如果您希望達到緩存每當您檢索信息的日期數據,但不一定需要,當你下一次打開應用程序要恢復數據的情況。

一個很好的使用例子是如果您有訪問已登錄用戶詳細信息的視圖。相反,具有其上使用的所有細節視圖用戶細節的聽衆,你可以指定保持同步該數據庫的參考,你可以得到最新的數據更快。可以在這裏閱讀火力地堡文檔中的持久性和同步

更多細節: https://firebase.google.com/docs/database/android/offline-capabilities

0

here

不知道兩者,是否與此有關。但是當這種崩潰可能發生時還有另外一種情況。

如果您的應用程序有一個服務(使用不同的流程),你創建自己的應用程序類,服務和前臺應用程序將使用相同的應用程序類(不是同一個實例)來初始化。現在,當我使用com.google.firebase:火力墜毀扶養來處理事故,它會創建一個後臺服務your.app.packagename:background_crash。出於某種原因,這導致了我的應用崩潰。具體而言,因爲在我的應用程序類,我和我們的應用類INITING時撥打電話一樣,

FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

我假設,後臺服務,不知何故火力地堡未初始化。爲了解決這個問題,我做了

if (!FirebaseApp.getApps(this).isEmpty()) 
     FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
7

創建一個應用程序類

public class MyApp extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     FirebaseDatabase.getInstance().setPersistenceEnabled(true); 

    } 
} 

,改變你的表現爲

<application 
    android:name=".MyApp" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
+0

我需要調用這個時候我告數據庫? – Rekt

+0

只有在您需要使用Firebase數據庫的離線屬性時才能使用此功能。也就是說,如果您處於離線狀態,那麼當您處於聯機狀態時,它會顯示上次提取的值,並且如果您在離線狀態下將某些內容推送到數據庫時,這有助於在再次聯機時推送它 –