gpt4 book ai didi

java - 练习通过重新启动 Activity 来处理可能的 nullPointerException

转载 作者:行者123 更新时间:2023-12-02 02:37:57 27 4
gpt4 key购买 nike

我试图以某种方式覆盖我在 Android Studio 中收到的所有方法调用可能会产生 nullPointerException 警告。

我已经阅读了很多有关此问题的主题,并得出结论,处理可能的异常的最佳实践是检查对象的值。(null 或 not null)。

尽管(理论上)下面示例中的对象永远不应该有 null 值:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

我仍然收到 Android Studio 警告,以下行可能会导致 NullPointerException:

mCurrentUser = user.getUid();

然后我认为可能存在一种孤立的情况,其中 user 实际上可能为 null,这不是由我编写的代码引起的。 (可能性非常低:假设 Firebase 会以某种方式无法检索我的用户)。

我问自己的下一个问题是:即使我检查了用户的值,如果他实际上为空,我的代码将如何执行?我可以给它一个默认值吗?

好吧,我不能。因为当我尝试读取有关该实际用户的数据库数据时,给他一个默认值会导致灾难。

我尝试了一种解决方法,即显示 Toast 并重新启动 Activity(以便再次完成检索用户的整个过程)

        if( user != null)
{
mCurrentUser = user.getUid();
}
else{
Toast toast = Toast.makeText(getBaseContext() , "Oops, something went wrong!" , Toast.LENGTH_LONG);
toast.show();
finish();
startActivity(getIntent());
}

但我很担心我的解决方案不是最佳实践。我应该如何更好地处理此类事件?

最佳答案

首先,当我们谈论 NullPointerException 时,我们谈论的是 Exception 而不是警告。当应用程序尝试使用值为 null 的对象引用时,会引发此类异常。

其次,您发现最佳实践是“处理”此异常,这在某种程度上是正确的。我认为您不想处理异常,因为在这种情况下您将使用 try-catch block 。我认为您正在寻找的是避免发生异常。这就是为什么您要检查 nullity,因为对象引用可以为 null,也可以包含一个值。

即使可能存在用户实际上可能为空的孤立情况,您也需要避免这种情况。因为这是我们验证对象实际状态的唯一方法,所以在无效的情况下您需要采取行动。因为这是关于 FirebaseUser 对象,所以我们讨论的是身份验证。我们现在讨论的不是对象具有值的情况。如果该对象为空,则意味着您无法获取用户。在这种情况下,为了用户体验,我建议您将用户重定向到登录 Activity 。

您实际上可以存储默认值(即在 SharedPreferences 中),但不推荐这样做,因为您希望使用正确的用户而不是您设置的用户。因此,您需要做好一切必要的准备才能获得正确的产品。

作为结论,在无效的情况下,如果没有登录 Activity ,则向用户显示一条消息并强制他再次登录,或者将用户重定向到登录 Activity 以实际重试以获取正确的用户。

希望有帮助。

关于java - 练习通过重新启动 Activity 来处理可能的 nullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45970274/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com