1

ユーザーが有効な電子メールとパスワードを入力してログインに失敗したときにアラート ダイアログを表示しようとしています。ログイン プロセスは HTTP 要求と JSON を処理する必要があるため、すべてを AsyncTask に入れましたが、これが、アラート ダイアログが表示されない理由です (表示されないことを願っています)。したがって、これはクラスcheckUseronPostExecuteで呼び出される method です。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ため、アラートダイアログを表示する前に閉じることにしました。しかし、それでも問題は解決していません。

4

2 に答える 2

2

だから私はこの方法でこれを自分で解決しました:どういうわけか、アラートダイアログはメソッドの外でしか機能しません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();
            }
        }

そしてほら、それはうまくいきます!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 に答える