1

当用户无法输入有效的电子邮件和密码登录时,我试图显示一个警报对话框。由于登录过程必须处理 HTTP 请求和 JSON,我将其全部放在 AsyncTask 中,我不确定是否这就是为什么我的警报对话框无法显示的问题(我希望不会)。所以这是在类checkUser中调用的方法:onPostExecuteAsyncTask

    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在执行此方法后关闭它,所以我决定在显示警报对话框之前将其关闭。但它仍然没有解决问题。

4

2 回答 2

2

所以我自己解决了这个问题:不知何故,警报对话框只能在方法之外工作checkUser。因此,我将错误 if 子句中的位移到dismiss()了 Progress 对话框下方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();
            }
        }

瞧,它有效!Ps:我仍然不知道为什么对话框在放入时无法显示checkUser

于 2013-01-07T03:59:37.097 回答
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();
于 2013-01-06T17:09:36.430 回答