【问题标题】:ProgressDialog force closing in an AsyncTaskProgressDialog 在 AsyncTask 中强制关闭
【发布时间】:2012-08-05 23:24:38
【问题描述】:

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

这是我的 Activity 的代码:

 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 中找到与我的问题相关的任何此类问题

【问题讨论】:

    标签: android android-asynctask nullpointerexception progressdialog logcat


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你声明了

      private ProgressDialog progressBar;
      

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

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

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

      将解决您的问题。

      【讨论】:

        【解决方案3】:

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

        with progressBar = ProgressDialog.show(PostActivity.this, "", "Logging in...", false, false);

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2015-05-12
            • 2011-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-27
            相关资源
            最近更新 更多