AlertDialog 在线程中无法关闭问题

今天遇到AlertDialog根据请求返回值来判定是否关闭对话框的问题

但是一直无法关闭

 

  1   // 对话框不消失
  2                             try
  3                             {
  4                                 Field field = dialog.getClass().getSuperclass()
  5                                         .getDeclaredField("mShowing");
  6                                 field.setAccessible(true);
  7                                 field.set(dialog, false);
  8                             } catch (Exception e)
  9                             {
 10                                 e.printStackTrace();
 11                             }
 12                             if (!strConfirmPassword.equals(strNewPassword))
 13                             {
 14                                 Toast.makeText(SetupActivity.this, "确认密码和新密码输入不一致", 200).show();
 15                                 edConfirmPassword.setFocusable(true);
 16                                 edConfirmPassword.setFocusableInTouchMode(true);
 17                                 edConfirmPassword.requestFocus();
 18                                 return;
 19                             }
 20 
 21                             if (strNewPassword.equals(""))
 22                             {
 23                                 Toast.makeText(SetupActivity.this, "请输入新密码", 200).show();
 24                                 edNewPassword.setFocusable(true);
 25                                 edNewPassword.setFocusableInTouchMode(true);
 26                                 edNewPassword.requestFocus();
 27                                 return;
 28                             }
 29 
 30                             // show progress
 31                             handler.sendEmptyMessage(1);
 32                             new Thread()
 33                             {
 34                                 public void run()
 35                                 {
 36 
 37                                     String result = FunctionFactory.getInstance().ModifyPassword(
 38                                             SetupActivity.this, Global.self.userid, strOldPassword,
 39                                             strNewPassword);
 40                                     Log.d("lyao", result);
 41                                     // dismiss progress
 42                                     handler.sendEmptyMessage(0);
 43 
 44                                     // 处理返回结果
 45                                     try
 46                                     {
 47                                         Map<String, String> data = new HashMap<String, String>();
 48                                         JSONTokener jsonParser = new JSONTokener(result);
 49                                         JSONObject jsonObject = new JSONObject(jsonParser);
 50 
 51                                         data.put("flag", jsonObject.isNull("flag") ? ""
 52                                                 : jsonObject.getString("flag"));
 53 
 54                                         Looper.prepare();
 55                                         if (data.get("flag").toString().equals("0"))
 56                                         {
 57 
 58                                             try
 59                                             {
 60                                                 Field field = dialog.getClass().getSuperclass()
 61                                                         .getDeclaredField("mShowing");
 62                                                 field.setAccessible(true);
 63                                                 field.set(dialog, true);
 64                                             } catch (Exception e)
 65                                             {
 66                                                 e.printStackTrace();
 67                                             }
 68                                             dialog.dismiss();
 69                                             Toast.makeText(SetupActivity.this, "密码修改成功", 200)
 70                                                     .show();
 71 
 72                                         }
 73 
 74                                         else if (data.get("flag").toString().equals("1"))
 75                                         {
 76 
 77                                             Toast.makeText(SetupActivity.this, "原密码不正确", 200)
 78                                                     .show();
 79                                         }
 80 
 81                                         // 密码不变 没有修改
 82                                         else if (data.get("flag").toString().equals("2"))
 83                                         {
 84 
 85                                             Toast.makeText(SetupActivity.this, "修改失败,新密码与原密码一致",
 86                                                     200).show();
 87                                         }
 88                                         Looper.loop();
 89 
 90                                     } catch (Exception e)
 91                                     {
 92                                         e.printStackTrace();
 93                                     }
 94 
 95                                     // Object[] objs = new Object[7];
 96                                     // objs[0] = SetupActivity.this;
 97                                     // objs[1] = delegate;
 98                                     // objs[2] = Global.self.userid;
 99                                     // objs[3] = strOldPassword;
100                                     // objs[4] = strNewPassword;
101                                     // objs[5] = handler;
102                                     // objs[6] = dialog;
103                                     // new
104                                     // ModifyUserPasswordTask().execute(objs);
105 
106                                 }
107 
108                             }.start();

注意红色标注的部分,首先采用线程的方式发请求 ,并用loop之间处理请求返回的各种情况,然后一定要手动关闭对话框,仅仅调用关闭对话框的那段代码起不了作用

posted on 2012-11-27 18:35  Tristan2012  阅读(989)  评论(0)    收藏  举报