2013-01-06 150 views
1

我试图显示一个警告对话框,当用户输入有效的电子邮件和密码登录失败。由于登录过程必须处理HTTP请求和JSON,我把它在AsyncTask中,我不确定这是为什么我的警报对话框不能显示的问题(我不希望)。因此,这是方法checkUser,这就是所谓内AsyncTask类的onPostExecuteAndroid - 在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,所以我决定在显示警报对话框之前关闭它。但它仍然没有解决问题。

回答

2

所以我解决了这个我自己是这样的:莫名其妙的警告对话框中只能方法checkUser之外。所以我移动比特误差范围内,如果条款外,进度对话框的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:我仍然不知道为什么对话框不能显示在checkUser之内。

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(); 
+0

我尝试添加,但它仍然不能显示,悲哀。 –

+0

@strawberryjam:首先确保控制进入其他区块,然后用最新代码 –

+0

编辑你的问题,谢谢你的建议!我只是通过添加'create()'来编辑我的代码,但问题仍然存在。 –