当用户退出时,应用程序关闭。
当我从这里更改实时规则时出现问题
{
"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();
}
});
答案 0 :(得分: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());
}