我有一个应用程序指向游戏商店中的另一个应用程序。它在测试和许多订阅者中运行良好。但对于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);
}
}
答案 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
本身决定“何时”调用它的方法。