Я создаю свое первое приложение Firebase. Одним из его требований является то, что он запускается, когда сеть недоступна. В руководстве Firebase указано:setPersistenceEnabled (true) crashes app
«Включение сохранения на диске позволяет нашему приложению сохранять все его состояние даже после перезапуска приложения. Мы можем включить жесткость диска только с одной строкой кода. FirebaseDatabase.getInstance().setPersistenceEnabled(true);
С диска настойчивостью включен, наши синхронизированные данные и записи будут сохранены на диск через приложение перезагружается, и наше приложение должно работать без проблем в офлайновых ситуациях.»
Другим требованием является использование Google Вход в систему. Поэтому в моем MainActivity
я проверяю, был ли пользователь подписан, если нет, я запускаю SignInActivity
. (SignInActivity
из примеров Firebase.) Работает SignInActivity
, пользователь вошел в систему, и MainActivity
запускается во второй раз. Теперь мое приложение падает на строку кода FirebaseDatabase.getInstance().setPersistenceEnabled(true);
со следующим сообщением:
Звонки на setPersistenceEnabled() должна быть произведена до любого другого использования экземпляра FirebaseDatabase.
Теперь, если я перезапущу приложение, пользователь выполнил вход, 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();
}
}
Благодаря Chip ... единственное место, где setPersistenceEnabled существует в настоящее время в моем MainActivity это не называется в моей SignInActivity. – Loren
Chip ... ваше предложение окружить setPersistenceEnable с помощью try/catch, а затем просто зарегистрировать ошибку и продолжить. Вы проверяли, сохраняются ли данные на локальном уровне? – Loren
@Loren мое приложение падает только тогда, когда я закрываю и открываю снова, я думаю, что он все еще работает в автономном режиме, потому что я пытаюсь включить режим полета, и мои данные остаются в моем приложении. – Sucipto