getActivity()上的空指针崩溃.getPackageManager()。queryIntentActivities()

时间:2017-10-15 06:51:30

标签: android nullpointerexception package

我有一个应用程序指向游戏商店中的另一个应用程序。它在测试和许多订阅者中运行良好。但对于2个人我在行上有一个空指针崩溃:if (getActivity().getPackageManager()...

我处在一个片段中,所以我怀疑它是一个背景问题。 可能是什么原因?许可问题?我应该添加什么测试来检查空指针?

private void getApp(){

    final Uri uri = Uri.parse("market://details?id=" + "test");
    final Intent rateAppIntent = new Intent(Intent.ACTION_VIEW, uri);

    if (getActivity().getPackageManager()
       .queryIntentActivities(rateAppIntent, 0).size() > 0)
    {
      startActivity(rateAppIntent);
    }
}

3 个答案:

答案 0 :(得分:1)

如果您的片段未附加到活动,

getActivity()可能会返回null。您可以使用isAdded()进行检查,或只需查看if (getActivity() != null)

即可

答案 1 :(得分:1)

<强>问题

  

如果   (getActivity()。getPackageManager()。queryIntentActivities(rateAppIntent,   0).size()&gt; 0)

对于您的要求,使用 getActivity().getPackageManager().queryIntentActivities 完全没必要。

简单方法

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("market://details?id=" + "test"));
startActivity(intent);

答案 2 :(得分:1)

仅当您的getActivity()未附加时,

Fragment才会返回null。根据我的经验,在调用方法之前进行异步处理并且用户已离开Fragment时,通常会发生错误。

通常情况下,如果用户已离开Fragment,您就不想做任何事情,因此应该为您提供一个简单的if (getActivity() != null)

可能导致此错误的其他情况是从Fragment课程外部调用此方法时。例如,您刚刚实例化Fragment并在将其附加到Activity之前调用您的方法。在这种情况下,您应该知道从Fragment类之外调用Fragment方法是一种非常糟糕的体验。而且你必须改变你的逻辑,以便Fragment本身决定“何时”调用它的方法。