0

今天我的 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()?

*更新* * 此错误仅在 100 多个会话中发生一次。

4

3 回答 3

1

如果您getActivity()的类扩展了FragmentActivity. 否则你试试yourActivty.this如果你的类扩展了活动

或者您在 Fragment 类调用 onAttach 中获得 Activty 引用

Activity mActivity=null
@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mActivity = activity;
    }
于 2013-09-20T09:50:40.443 回答
1

有时,片段与您的活动分离,getActivity() 返回 null。

你可以在这里看到这个:http: //developer.android.com/guide/components/fragments.html

注意:如果您需要在 Fragment 中包含 Context 对象,您可以调用 getActivity()。但是,请注意仅当片段附加到活动时才调用 getActivity()。当片段尚未附加或在其生命周期结束时被分离时,getActivity() 将返回 null。

这就是你在这里获得 NPE 的原因。

于 2013-09-20T10:04:52.470 回答
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();

        }
于 2013-09-20T09:53:54.300 回答