Reputation: 475
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();
Upvotes: 35
Views: 19708
Reputation: 2641
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
Upvotes: 16
Reputation: 5109
This works for me. Add this to your launching activity!
try {
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
} catch (Exception e) {}
Upvotes: 1
Reputation: 129
If you are using Kotlin, the following code worked for me. I declared as private member variable at the top of the class.
private val firebaseInstance = FirebaseDatabase.getInstance().apply { setPersistenceEnabled(true) }
Upvotes: 1
Reputation: 5598
You could try checking if there are any initialized firebase apps before calling setPersistenceEnabled.
if (FirebaseApp.getApps(this).size() == 0)
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Upvotes: 0
Reputation: 1033
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);
}
Upvotes: 6
Reputation: 129
If you extend a ContentProvider
in your app you can call FirebaseDatabase.getInstance().setPersistenceEnabled(true);
in your ContentProvider
's onCreate()
method because this method is called even before the onCreate()
method of your launcher activity. This will also be useful when you use TaskStackBuilder
in your app to create a synthetic stack of activities to skip some activities and move forward like when you use in app notifications. So when you come back to the launcher activity moving backwards you might have already used FirebaseDatabase
instance somewhere in your application and the error you are getting might pop up in this case as well.
Upvotes: 3
Reputation: 720
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.
Upvotes: 5
Reputation: 2954
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
For Example
class MyFirebaseApp extends android.app.Application
@Override
public void onCreate() {
super.onCreate();
/* Enable disk persistence */
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
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.
Upvotes: 107
Reputation: 598847
Something like this (iirc):
if (mDatabase == null) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.setPersistenceEnabled(true);
mDatabase = database.getReference();
// ...
}
Upvotes: 24