Подтвердить что ты не робот

Com.google.firebase.database.DatabaseException: вызовы setPersistenceEnabled() должны быть выполнены перед любым другим использованием экземпляра FirebaseDatabase

У меня проблема при попытке setPersistence в fIREBASE, может кто-то объяснить, как это сделать,

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();
4b9b3361

Ответ 1

Что-то вроде этого (iirc):

 if (mDatabase == null) {
     FirebaseDatabase database = FirebaseDatabase.getInstance();
     database.setPersistenceEnabled(true);
     mDatabase = database.getReference();
     // ...
 }

Ответ 2

В соответствии с документацией Firebase setPersistenceEnabled вызывается только один раз (до создания любых других экземпляров FirebaseDatabase)

Итак, решение этой проблемы для меня было следующим

  • Вам нужно создать класс, который расширяет android.app.Application и setPersistenceEnabled (true).

Пример

class MyFirebaseApp extends android.app.Application 

@Override
public void onCreate() {
    super.onCreate();
    /* Enable disk persistence  */
    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
  1. В манифесте свяжите класс MyFirebaseApp с тегом приложения

Пример

в теге приложения добавьте следующие

android:name="com.example.MyFirebaseApp"

это должно работать нормально.

Также не используйте setPersistenceEnabled в любом другом мероприятии.

Ответ 3

Просто добавьте это вверху вашего класса активности:

static {
    FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}

Работал для меня, но не уверен, что это лучшая практика.

Ответ 4

Если вы расширяете ContentProvider в своем приложении, вы можете вызвать FirebaseDatabase.getInstance().setPersistenceEnabled(true); в вашем методе ContentProvider onCreate(), потому что этот метод вызывается еще до метода onCreate() вашей активности запуска. Это также будет полезно, если вы используете TaskStackBuilder в своем приложении, чтобы создать синтетический стек действий, чтобы пропустить некоторые действия и двигаться вперед, как при использовании в уведомлениях приложений. Поэтому, когда вы возвращаетесь к активности запуска, двигаясь назад, вы, возможно, уже использовали экземпляр FirebaseDatabase где-то в своем приложении, и в этом случае может появиться ошибка, которую вы получаете.

Ответ 5

Это решение работает для меня без расширений android.app.Application

private static FirebaseDatabase firebaseDatabase;

    if (firebaseDatabase == null) {
        firebaseDatabase=FirebaseDatabase.getInstance();
        firebaseDatabase.setPersistenceEnabled(true);
    }
    /* Do your other stuff  */

ИЛИ

if (savedInstanceState == null) {
   FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}