Я создаю свое первое приложение 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();
}
}