2015-12-25 14 views
4

我正在开发使用Firebase作为后端的应用程序。我试图实现由Firebase提供的磁盘持久性,但是当我重新启动应用程序时,我的应用程序崩溃。该文件说写Firebase.getDefaultConfig().setPersistenceEnabled(true)之前写任何firebase参考,我这样做,但它不工作。Firebase磁盘持久性错误:对Config对象的修改必须在使用前进行

这里是我的代码部分:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Firebase.setAndroidContext(this); 
     firebase.getDefaultConfig().setPersistenceEnabled(true); 
     firebase = new Firebase(getString(R.string.firebase_url)); 

     setContentView(R.layout.activity_main); 
     //remaining code 
} 

日志输出:

Caused by: com.firebase.client.FirebaseException: Modifications to Config objects must occur before they are in use 
     at com.firebase.client.core.Context.assertUnfrozen(Context.java:124) 
     at com.firebase.client.Config.setPersistenceEnabled(Config.java:155) 
     at activity.MainActivity.onCreate(MainActivity.java:148) 
     at android.app.Activity.performCreate(Activity.java:5984) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2256) 
+1

呼叫setPersistenceEnabled()setAndroidContext前()。 –

+0

它不工作的兄弟。我试图弄清楚,发现只有一个线索:当应用程序不粘在缓存内存然后重新启动应用程序不会崩溃的应用程序。所以我手动清除了缓存内存,应用程序工作正常。但这不是正确的解决方案。任何其他的想法? –

+0

它的工作,您的示例应用程序(https://github.com/firebase/AndroidDrawing)帮助我找出问题:)。 –

回答

9

明白了!问题是Firebase.setAndroidContext(this);Firebase.getDefaultConfig().setPersistenceEnabled(true);每个应用程序只能声明一次,如文档所述(https://www.firebase.com/docs/android/api/)。

所以,上面提到的两个语句被包含在应用程序java文件的onCreate()中,而不是在activity java文件中。在创建任何Firebase对象之前,还应该包含它们。这解决了问题:)。

+0

可以举一个例子..面临同样的问题.. –

+3

应用程序java文件是类应用程序的子代。这意味着您必须创建一个扩展Application类的类。然后在onCreate()中包含语句Firebase.getDefaultConfig()。setPersistenceEnabled(true)。不要忘记执行清单条目。 –

+0

也应在添加ref初始化之前添加。 – jitenagarwal19

4

我也面临类似的问题,并最终解决了这个问题,只是检查isPersistenceEnabled是否为假,然后只设置持久性。这样做对你onCreate方法

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); 
    if (Firebase.getDefaultConfig().isPersistenceEnabled() == false) 
     Firebase.getDefaultConfig().setPersistenceEnabled(true); 
    Firebase.setAndroidContext(this); 

}

+0

正是我在找的!谢谢@Surendra –