今天我的G. Analytics帐户报告了这行代码的错误
private class GetSubscriptionListTask extends AsyncTask<Void, Void, Void> {
boolean onlyUnread=true;
public GetSubscriptionListTask(boolean onlyUnread) {
super();
this.onlyUnread=onlyUnread;
}
ProgressDialog progress;
@Override
protected void onPreExecute() {
//Show progress Dialog here
super.onPreExecute();
// create ProgressDialog here ...
progress = new ProgressDialog(getActivity()); // <-- That's the line
progress.setMessage("Downloading Subscriptions");
// set other progressbar attributes
progress.setCancelable (false);
progress.setIndeterminate (true);
progress.show();
}
}
这是
行progress = new ProgressDialog(getActivity()); // <-- That's the line
这是错误报告
NullPointerException (@SubscriptionsListFragment$GetSubscriptionListTask:onPreExecute:415) {main}
这是什么意思? nullexception是关于ProgressDialog还是getActivity()?
的 的 * UPDATE * * 此错误仅在100多个会话中发生一次。
答案 0 :(得分:1)
如果您的班级扩展了getActivity()
,则可以使用FragmentActivity
。否则,如果您的类扩展了活动
yourActivty.this
或者你在Fragment类中调用onAttach
获得Activty引用Activity mActivity=null
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = activity;
}
答案 1 :(得分:1)
有时,Fragments与您的活动分离,getActivity()返回null。
您可以在此处看到:http://developer.android.com/guide/components/fragments.html
警告:如果在Fragment中需要Context对象,则可以 调用getActivity()。但是,请注意只调用getActivity() 当片段附加到活动时。当片段不是 尚未附着,或在其生命周期结束时被分离, getActivity()将返回null。
这就是你在这里获得NPE的原因。
答案 2 :(得分:0)
// try this way
private class GetSubscriptionListTask extends AsyncTask<Void, Void, Void> {
boolean onlyUnread=true;
Context context;
public GetSubscriptionListTask(boolean onlyUnread,Context context) {
super();
this.onlyUnread=onlyUnread;
this.context=context;
}
ProgressDialog progress;
@Override
protected void onPreExecute() {
//Show progress Dialog here
super.onPreExecute();
// create ProgressDialog here ...
progress = new ProgressDialog(context); <-- That's the line
progress.setMessage("Downloading Subscriptions");
// set other progressbar attributes
progress.setCancelable (false);
progress.setIndeterminate (true);
progress.show();
}