# #android #firebase #firebase-realtime-database
Вопрос:
Когда пользователь выходит из системы, приложение закрывается.
Проблема возникла, когда я изменил правила реального времени с этого
{
"rules": {
".read": true,
".write": true
}
}
к этому
{
"rules": {
".read": "auth.uid != null",
".write": "auth.uid != null"
}
}
КНОПКА ВЫХОДА ИЗ СИСТЕМЫ
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirebaseAuth.getInstance().signOut();
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
getActivity().finishAffinity();
}
});
Ответ №1:
Похоже, ваше приложение выходит из строя, и в этом случае в вывод logcat будет записано сообщение об ошибке и трассировка стека. Это подскажет вам, в чем проблема и где она возникает в вашем коде.
Тем не менее, учитывая, что это произошло, когда вы изменили систему безопасности, у вас, скорее всего, будет активный прослушиватель вашей базы данных, когда вы выйдете из системы. Поскольку у вас установлены правила ".read": "auth.uid != null"
, это означает, что пользователь должен пройти проверку подлинности, чтобы иметь возможность считывать/прослушивать данные. Поэтому, когда они выходят из системы, это условие больше не выполняется.
Я предполагаю, что у вас есть onCancelled
слушатель, который реализован как:
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
Таким образом, это исключение в этом случае является причиной сбоя вашего приложения.
Ваши два основных варианта устранения этой ошибки:
- Найдите активных слушателей и [удалите их] перед выходом пользователя из системы. Это чистое решение, но это определенно больше работы, чем…
- Не создавайте исключение, но регистрируйте проблему с помощью:
@Override public void onCancelled(DatabaseError databaseError) { Log.e("Firebase", "Database listener cancelled", databaseError.toException()); }