Невозможно закрыть диалог выполнения


Вот мой сегмент кода, который я пытаюсь закрыть диалог, но он не закрывается, а также я не получаю никакой ошибки на logcat.Пожалуйста, поправьте меня, где я ошибаюсь ?

Весь журнал.V оператор get выполнен.Даже лог.V оператор после pd.dismiss() (Log.v("TAG","progress dismiss");) печатается.

Пожалуйста, укажите на мою ошибку или предложите какой-нибудь альтернативный способ отклонить 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 3

5 ответов:

Вы не отвергаете тот же 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);
if (pd.isShowing()) {
             pd.dismiss();
   }

Вместо использования потока используйте асинхронную задачу Использование

Ваша проблема, вероятно, заключается в том, что вы пытаетесь изменить пользовательский интерфейс (закрыть диалоговое окно) из другого потока. Я удивлен, что вы не получаете сообщение об ошибке. Попробуйте отключить диалог из потока пользовательского интерфейса, например, с помощью .runOnUIThread () .

Потому что вы пытаетесь использовать элемент UI Thread progressDialog в потоке, отличном от UI . Это будет разрешено через AsyncTask , handler или только RunOnUIThread(runnable).

Читайте больше о них и используйте любой из них .

Просто взгляните эта ссылка может быть полезной

Http://eagle.phys.utk.edu/guidry/android/progressBarExample.html