繁体   English   中英

在AsyncTask中未关闭ProgressDialog

[英]ProgressDialog not dismissed in AsyncTask

我有一个AsyncTask问题。 我有一个带有三个CheckBox的Activity,如果选中该复选框,则当用户按下按钮时启动异步任务。 我的异步是这样

    private class MyTask extends AsyncTask<Void, Void, Void> {

String valore

            public MyTask(String valore) {
                this.valore = valore;
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setMessage(getString(R.string.message));
                progressDialog.setIndeterminate(true);
                progressDialog.show();
            }

            @Override
            protected Void doInBackground(Void... params) {
                // TODO Auto-generated method stub
                // Exec some operations

                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                if(risultato != null) {
                    textView.append(risultato);
                }
                if(errori != null) {
                    textView.append(errori);
                }
                progressDialog.dismiss();
            }

        }

和按钮

button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(checkBox.isChecked()) {
                    new MyTask("string").execute();
                }
                if(checkBox2.isChecked()) {
                    new MyTask("string2").execute();
                }
                if(checkBox3.isChecked()) {
                    new MyTask("string3").execute();
                }
            }           
        });

问题在于,如果选中了两个或三个复选框,则不会关闭ProgressDialog,而是将其保留在屏幕上。 为什么? 选中两个或多个复选框时,如何也将其关闭?

 try {
                            if ((pDialog != null) && pDialog.isShowing()) {
                                pDialog.dismiss();
                            }
                        } catch (final IllegalArgumentException e) {
                            // Handle or log or ignore
                        } catch (final Exception e) {
                            // Handle or log or ignore
                        } finally {

                            pDialog = null;
                        }

尝试关闭这种对话框,这样可能会解决您的问题

这段代码有问题

 public void onClick(View v) {
                // TODO Auto-generated method stub
                if(checkBox.isChecked()) {
                    new MyTask("string").execute();
                }
                if(checkBox2.isChecked()) {
                    new MyTask("string2").execute();
                }
                if(checkBox3.isChecked()) {
                    new MyTask("string3").execute();
                }
            }        

如果我们对该代码进行空运行,这通常是一个逻辑错误,它将随着选中的复选框数量的增加而执行多次。 假设您对checkbox1进行了检查,它将执行异步1次,而当您单击checkbox2时,它将执行checkbox1异步以及checkbox2异步,依此类推,因此请更改onclicklistner按钮上的条件

您好,由于您每次都创建一个新的progressDialog,因此不会关闭它。 只创建一个并在公共位置保留变量。 例如

@Override
            protected void onPreExecute() {
                super.onPreExecute();
                if(progressDialog!=null){
                progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setMessage(getString(R.string.message));
                progressDialog.setIndeterminate(true);
                progressDialog.show();
               }
            }

您在“ doInBackground”方法中正在做什么,也请编写该代码。 什么是“ risultato”和“ errori”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM