0

我正在尝试在我的 Activity 的 onResume() 事件中运行异步任务。我的目标是每次 Activity 进入前台时运行任务。当我在模拟器/电话中运行它时,当遇到 onPreExecute 方法中存在的 ProgressDialog 代码时,应用程序强制关闭。

这是我的活动代码:

 public class PostActivity extends Activity {

    private ProgressDialog progressBar;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.post);
    }


    public void onResume() {
        super.onResume();
        new LoadFeedTask().execute();
    }


    public class LoadFeedTask extends AsyncTask<Void, Void, Boolean> {

        protected void onPreExecute() {
            progressBar.setCancelable(false);
            progressBar.setMessage("Logging in...");
            progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressBar.show();
        }

        @Override
        protected Boolean doInBackground(Void... params) {

            // TODO Auto-generated method stub
            ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            Log.d(TAG, "Checking Internet Connectivity");
            if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                return true;
            }
            return false;

        }

        protected void onPostExecute(Boolean result) {

            progressBar.dismiss();

            if (result == true) {

                //Do Something

            }

            if (result == false) {

                //Do Something Else
            }

        }

    }

}

当我检查 LogCat 的输出时,它在 progressBar.setCancelable(false) 处显示 NPE。即使经过数小时的努力,我也无法解决它。请帮忙。抱歉,如果这是一个重复的问题,我似乎无法在 SO 中找到与我的问题相关的任何此类问题

4

4 回答 4

3

尝试在 preExecute 中替换整个 4 行 ProgressDialog

with progressBar = ProgressDialog.show(PostActivity.this, "", "正在登录...", false, false);

于 2012-08-08T19:30:05.013 回答
0

听起来您的应用程序在将您的应用程序移至后台时正在收集进度条的垃圾。在调用 asynctask 之前,在 onResume 中重新初始化你的 progressBar 变量。

实际上,当您最小化您的应用程序时,您的progressDialog 可能刚刚被关闭。检查并确保它在启动时实际上是打开的。无论哪种方式,您都会获得 NPE,因为 progressBar 不存在,您需要找到它并将其带回。

于 2012-08-08T19:14:42.997 回答
0

你声明了

private ProgressDialog progressBar;

但它从未被初始化(没有创建任何实例),因此它实际上是一个 NULL 指针。

onCreate()在您的方法中添加此代码

progressBar = new ProgressDialog(this, ProgressDialog.STYLE_SPINNER);

将解决您的问题。

于 2012-08-08T19:19:28.623 回答
0

如果您想在任何地方都使用相同的:在课堂上或其他地方ProgressDialog解雇。onPostExecute所以你可以简单地将它定义为 progress = new ProgressDialog(RemoteActivity.this);

然后它将起作用,您可以在任何地方使用它。

于 2014-10-28T11:34:03.293 回答