当用户无法输入有效的电子邮件和密码登录时,我正在尝试显示警告对话框。由于登录过程必须处理HTTP请求和JSON,我把它全部放在AsyncTask中我就是不确定这是否是我的警报对话框无法显示的问题(我希望不会)。所以这是方法checkUser
,在onPostExecute
类的AsyncTask
内调用:
public void checkUser(JSONObject json){
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
if (tag == login_tag){
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
String res = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
// user successfully logged in
// Store user details in SQLite Database
// code omitted
} else{
// Error in login
mProgressDialog.dismiss();
builder.setMessage("Incorrect username/password")
.setTitle("Error")
.setNeutralButton("OK", new OnClickListener() {
public void onClick(final DialogInterface dialog,final int which) {
dialog.cancel();
}
}).create().show();
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
不知怎的,我的警告对话框永远无法显示,我不知道为什么。如果你知道这个问题的原因是什么,请帮助我。非常感谢!
编辑:结果我在执行此方法后只关闭Progress Dialog
,所以我决定在显示警告对话框之前将其关闭。但它仍然没有解决问题。
答案 0 :(得分:2)
所以我这样解决了这个问题:不知何故,Alert对话框仅在方法checkUser
之外工作。所以我将错误if句子中的位移到dismiss()
中的onPostExecute()
进度对话框之下:
protected void onPostExecute(JSONObject json) {
checkUser(json);
mProgressDialog.dismiss();
try {
if (json.get(ERROR_MSG) != null){
String errorMsg = json.getString(ERROR_MSG);
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setMessage(errorMsg)
.setTitle("Error")
.setNeutralButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
瞧,它有效!
P.s:我仍然不知道为什么放入checkUser
时对话框无法显示。
答案 1 :(得分:1)
缺少builder.create()
// Error in login
builder.setMessage("Incorrect username/password")
.setTitle("Error")
.setNeutralButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
dialog.cancel();
}
}).create().show();