无法关闭进度对话框

时间:2011-11-10 08:44:30

标签: android progressdialog

这是我的代码段我试图解除对话但它没有被解雇,我也没有得到任何关于logcat的错误。请纠正我在哪里我错了?

所有Log.v语句都被执行。pd.dismiss() (Log.v("TAG","progress dismiss");)打印后的每个log.v语句。

请指出我的错误或提出一些替代方法来解雇progressdialog。

 btnSave.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View arg0) {

                        // TODO Auto-generated method stub
                        //do something
                        } else {
                            Log.v("TAG","above progressDialog");
                            final ProgressDialog pd = new ProgressDialog(ChangePassword.this);
                            ProgressDialog.show(ChangePassword.this, "", "Loading...", false, true);
                            new Thread() {
                                public void run() {
                                    try {                               
                                        sleep(2000);
                                        Log.v("TAG","in try block");
                                    } catch (Exception e) {
                                        Log.e("tag", e.getMessage());
                                    }
                                    // dismiss the progress dialog
                                    pd.dismiss();
    //                              Log.v("TAG","progress dismiss");
                                }
                            }.start();
                            Log.v("TAG","after start");


                             public void run()
                             {
                                 try{

                                     if (!(txtOldPass.getText().toString())
                                            .equals(SetGetValues.getPassword())) {

                                        Toast.makeText(ChangePassword.this,
                                                "Invalid Old Password", Toast.LENGTH_SHORT)
                                                .show();
                                        txtOldPass.setText("");
                                        txtNewPass.setText("");
                                        txtCnfPass.setText("");
                                    } else {
                                        if (!(txtNewPass.getText().toString())
                                                .equals(txtCnfPass.getText().toString())) {
                                            Toast.makeText(ChangePassword.this,
                                                    "Re-Enter New Password",
                                                    Toast.LENGTH_SHORT).show();
                                            txtOldPass.setText("");
                                            txtNewPass.setText("");
                                            txtCnfPass.setText("");
                                        } else {
                                            try {

    handler = new Handler();
                         handler.postDelayed(new Thread (new Runnable(){
                                                JSONStringer loginuser = new JSONStringer()
                                                        .object()
                                                        .key("userid")
                                                        .value(SetGetValues.getUserid()
                                                                .trim())
                                                        .key("password")
                                                        .value(txtCnfPass.getText()
                                                                .toString().trim())
                                                        .key("oldpassword")
                                                        .value(txtOldPass.getText()
                                                                .toString().trim())
                                                        .endObject();
                                                StringEntity entity = new StringEntity(
                                                        loginuser.toString());
                                                JSONObject results = bc
                                                        .returnJSONObject(loginuser,
                                                                "url");

                                                String message = results
                                                        .getString("message");
                                                String isvalid = results
                                                        .getString("isvalid");
                                                if (isvalid.contains("FALSE")) {
                                                } else {
                                                    //pd.dismiss();
                                                    Toast.makeText(
                                                            ChangePassword.this,
                                                            "Password changed successfully",
                                                            Toast.LENGTH_SHORT).show();
                                                }
                                            } catch (Exception e) {
                                                 //TODO: handle exception
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                             }catch(Exception e)
                             {
                                 e.printStackTrace();
                             }
                             }
                            }), 1000);


                        }
                    }

                });

5 个答案:

答案 0 :(得分:10)

您不会忽略您正在展示的相同ProgressDialog。替换这个:

final ProgressDialog pd = new ProgressDialog(ChangePassword.this);
ProgressDialog.show(ChangePassword.this, "", "Loading...", false, true);

用这个:

final ProgressDialog pd = ProgressDialog.show(ChangePassword.this, "", "Loading...", false, true);

答案 1 :(得分:1)

if (pd.isShowing()) {
             pd.dismiss();
   }

而不是使用线程使用异步任务 usage

答案 2 :(得分:1)

你的问题可能是,你正在尝试从另一个线程修改UI(关闭对话框)。我很惊讶您没有收到错误消息。尝试从UI线程中删除对话框,例如使用.runOnUIThread()

答案 3 :(得分:1)

因为您尝试在非UI线程中使用UI线程progressDialog的元素。 这将仅允许AsyncTaskhandlerRunOnUIThread(runnable)

详细了解它们并使用任何一个。

答案 4 :(得分:1)