com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance
Solution 1
Something like this (iirc):
if (mDatabase == null) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.setPersistenceEnabled(true);
mDatabase = database.getReference();
// ...
}
Solution 2
According to Firebase Documentations setPersistenceEnabled is to be called only once (before any other instances of FirebaseDatabase are made)
So the solution to this issue for me was the following
- You need to create a class which extends android.app.Application and setPersistenceEnabled(true) over there.
For Example
class MyFirebaseApp extends android.app.Application
@Override
public void onCreate() {
super.onCreate();
/* Enable disk persistence */
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
- In the Manifest, link the MyFirebaseApp class to the application tag
For Example
in your application tag add the following
android:name="com.example.MyFirebaseApp"
this should work fine.
Also don't use setPersistenceEnabled in any other Activity.
Solution 3
Create an application class that will be used across your entire application and initialize firebase Persistence in it: The Class should extend Application.( ClassName extends Application):
Heres An Example:
FirebaseHandler class
You can call/name the class whatever you want to name it
public class FirebaseHandler extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
Add the application class to your Manifest:
<application
android:name=".FirebaseHandler"
android:allowBackup="true"
android:icon="@mipmap/app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme">
This way data persistance will be applied to your entire project. Inorder to apply disk persistence to specific data.
DatabaseReference myRef=FirebaseDatabase.getInstance().getReference("people");
myRef.keepSynced(true);
This will keep your offline data synced and up to date
myRef.keepSynced(true);
Learn more about Disk Persistence Here
Solution 4
This solution works for me without extends android.app.Application
private static FirebaseDatabase firebaseDatabase;
if (firebaseDatabase == null) {
firebaseDatabase=FirebaseDatabase.getInstance();
firebaseDatabase.setPersistenceEnabled(true);
}
/* Do your other stuff */
OR
if (savedInstanceState == null) {
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
Solution 5
Just add this at the top of your activity class:
static {
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
Worked for me, not sure if it's the best practice though.
Vincent Macharia
Updated on June 02, 2022Comments
-
Vincent Macharia about 2 years
I am having a problem when I try to setPersistence in fIREBASE,can someone please explain on how to go about it,
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_meal_details); if (mDatabase == null) { mDatabase = FirebaseDatabase.getInstance().getReference(); FirebaseDatabase.getInstance().setPersistenceEnabled(true); // ... } // FirebaseDatabase.getInstance().setPersistenceEnabled(true); mDatabase = FirebaseDatabase.getInstance().getReference();