ProgressDialog强制关闭AsyncTask

时间:2012-08-08 19:12:07

标签: android android-asynctask nullpointerexception progressdialog logcat

我正在尝试在Activity的onResume()事件中运行异步任务。我的目标是每次Activity进入前台时运行任务。当我在模拟器/手机中运行时,app force会在遇到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 个答案:

答案 0 :(得分:3)

尝试在preExecute

中替换ProgressDialog的全部4行

with progressBar = ProgressDialog.show(PostActivity.this,“”,“登录...”,false,false);

答案 1 :(得分:0)

听起来你的应用程序在将应用程序移动到后台时会收集progressBar。在调用asynctask之前,在onResume中重新初始化progressBar变量。

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

答案 2 :(得分:0)

你宣布了

private ProgressDialog progressBar;

但它从未初始化(没有任何实例), 所以它实际上是一个NULL指针。

onCreate()方法

中添加此代码
progressBar = new ProgressDialog(this, ProgressDialog.STYLE_SPINNER);

将解决您的问题。

答案 3 :(得分:0)

如果你想在ProgressDialog或你班级的其他任何地方使用相同的onPostExecute。因此,您只需将其定义为progress = new ProgressDialog(RemoteActivity.this);

即可

它会起作用,你可以在任何地方使用它。

相关问题