Я создаю свое первое приложение Firebase. Одним из его требований является то, что он работает, когда сеть недоступна. Руководство Firebase гласит:
Включение сохранения диска позволяет нашему приложению также сохранять все его состояние даже после перезапуска приложения. Мы можем включить сохранение диска только одной строкой кода. FirebaseDatabase.getInstance() setPersistenceEnabled (истина). С включенным постоянством диска наши синхронизированные данные и записи будут сохраняться на диск при перезапуске приложения, и наше приложение должно бесперебойно работать в автономном режиме.
Еще одно требование - использовать Google Sign In. Поэтому в своей MainActivity я проверяю, MainActivity ли пользователь, если нет, я запускаю SignInActivity. (SignInActivity из примеров Firebase.) SignInActivity работает, пользователь SignInActivity в систему, и MainActivity запускается во второй раз. Теперь мое приложение вылетает в строке кода FirebaseDatabase.getInstance().setPersistenceEnabled(true); со следующим сообщением:
Вызовы setPersistenceEnabled() должны быть сделаны перед любым другим использованием экземпляра FirebaseDatabase.
Теперь, если я перезапущу свое приложение, пользователь SignInActivity в систему, SignInActivity не запускается, мое приложение работает нормально.
Любые предложения о том, как избежать этого сбоя после входа пользователя?
Когда я писал этот вопрос, я получил предложение переместить FirebaseDatabase.getInstance().setPersistenceEnabled(true); на мой "класс приложений". Я получаю точно такой же результат... SignInActivity запускается, завершается, и я получаю сбой на setPersistenceEnabled.
Ниже мой MainActivity onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
// Crash here upon returning from SignInActivity.
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
mFirebaseDbReference = FirebaseDatabase.getInstance().getReference();
// Initialize Firebase Auth
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
// Not signed in, launch the Sign In activity
Timber.tag("MainActivity").i("onCreate(): User not signed in, launching SignInActivity");
startActivity(new Intent(this, SignInActivity.class));
finish();
} else {
mUsername = mFirebaseUser.getDisplayName();
Timber.tag("MainActivity").i("onCreate(): User \"%s\" signed in.", mUsername);
if (mFirebaseUser.getPhotoUrl() != null) {
mPhotoUrl = mFirebaseUser.getPhotoUrl().toString();
}
}