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之间处理请求返回的各种情况,然后一定要手动关闭对话框,仅仅调用关闭对话框的那段代码起不了作用
浙公网安备 33010602011771号