为什么当用户退出帐户时我的应用程序关闭?

时间:2021-06-16 03:58:19

标签: 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 个答案:

答案 0 :(得分:1)

听起来您的应用程序崩溃了,在这种情况下,会有一条错误消息和堆栈跟踪写入 logcat 输出。这将告诉您问题是什么,以及它在您的代码中出现的位置。

也就是说,考虑到它发生在您更改安全性时,当您退出时,您很可能有一个活跃的数据库侦听器。由于您将规则设置为 ".read": "auth.uid != null",这意味着用户必须经过身份验证才能读取/侦听数据。因此,当他们退出时,不再满足该条件。

我的猜测是您在侦听器中有一个 onCancelled,实现为:

@Override
public void onCancelled(DatabaseError databaseError) {
    throw databaseError.toException();
}

因此,在这种情况下,异常是导致您的应用崩溃的原因。

修复此崩溃的两个主要选项:

  1. 找出您有哪些活跃的侦听器,并在用户注销之前[删除它们]。这是干净的解决方案,但它绝对比...更多的工作

  2. 不要抛出异常,而是通过以下方式记录问题:

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e("Firebase", "Database listener cancelled", databaseError.toException());
    }