2016-12-06 12 views
0

サーバからのボタンクリックでログアウト操作を実行しようとしていますが、ログアウトをクリックするたびにSweetAlertDialogBoxに固執します。ハンドラを呼び出すことができません

私は自分のコードをデバッグしているときに、デバッガは次の行までコードをデバッグします。 "log.server()内の新しいコールバック(){" 。メッセージ」、それが実際に終了し、それは両方の

失敗とonResponse方法についてをスキップしLogcat

で述べたエラーがないこれは私のボタンをクリックしてコードである: -

btnLogout = itemBuilder.setContentView(logoutIcon).build(); 
    btnLogout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder alertDialog = new AlertDialog.Builder(AlarmActivity.this); 
      alertDialog.setMessage("Are you sure you want to log out?"); 
      alertDialog.setCancelable(false); 
      alertDialog.create(); 
      alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 

        if (networkUtil.isConnected()) { 
         logoutService(); 
        } else { 
         AlertDialog.Builder alertbox = new AlertDialog.Builder(AlarmActivity.this); 
         alertbox.setMessage("No network connection, Please try after some time"); 
         alertbox.create(); 
         alertbox.setCancelable(false); 
         alertbox.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.cancel(); 
    } 
         }); 
         alertbox.show(); 
        } 
       } 

      }).setNegativeButton("No", null).show(); 

     } 
    }); 

これは私のログアウトでありますとログアウト方法: -

public void logout() { 
    Intent i = new Intent(this, AlertDialogActivity.class); 
    pendingIntent = PendingIntent.getActivity(AlarmActivity.this, 
      12345, i, PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    manager.cancel(pendingIntent); 
    stopService(new Intent(AlarmActivity.this, LocationTracker.class)); 
    System.exit(0); 
} 

    private void logoutService() { 
    OkHttpClient client = new OkHttpClient(); 
    String requestURL = String.format(getResources().getString(R.string.service_logout)); 
    JSONObject jsonrequest = new JSONObject(); 
    try { 
     Date today = Calendar.getInstance().getTime(); 
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); 
     jsonrequest.accumulate("mobNo", pref.getValueFromSharePref("mobileno")); 
     jsonrequest.accumulate("empAuthKey", pref.getValueFromSharePref("authKey")); 
     jsonrequest.accumulate("logoutTime", simpleDateFormat.format(today)); 
     jsonrequest.accumulate("lat", "" + locationInfo.lastLat); 
     jsonrequest.accumulate("lon", "" + locationInfo.lastLong); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    final RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonrequest.toString()); 
    Request request = new Request.Builder() 
      .url(requestURL) 
      .post(body).build(); 

    final SweetAlertDialog pDialog = new SweetAlertDialog(AlarmActivity.this, cn.pedant.SweetAlert.SweetAlertDialog.PROGRESS_TYPE); 
    pDialog.getProgressHelper().setBarColor(Color.parseColor("#A5DC86")); 
    pDialog.setTitleText("Loading, Please wait ..."); 
    pDialog.setCancelable(false); 
    pDialog.show(); 

    client.newCall(request).enqueue(new Callback() { 
     String status,message; 
     Handler handler = new Handler(new Handler.Callback() { 
      @Override 
      public boolean handleMessage(Message msg) { 
       if (msg.what == 1) { 
        Toast.makeText(getBaseContext(), "" + message, Toast.LENGTH_SHORT).show(); 
        logout(); 
       } else if (msg.what == 0) { 
        Toast.makeText(getBaseContext(), "" + message, Toast.LENGTH_SHORT).show(); 
       } else if (msg.what == -1) { 
        Toast.makeText(getBaseContext(), "" + message, Toast.LENGTH_SHORT).show(); 
       } else if (msg.what == 2) { 
        Toast.makeText(AlarmActivity.this, "System Error Please try again...", Toast.LENGTH_LONG).show(); 
       } 
       return false; 
      } 
     }); 

     @Override 
     public void onFailure(Call call, IOException e) { 
      if (pDialog.isShowing()) pDialog.dismiss(); 
      handler.sendEmptyMessage(2); 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 
      if (response.isSuccessful()) { 
       String responseString = response.body().string(); 
       try { 
        JSONObject jsonResponse = new JSONObject(responseString); 
        status = jsonResponse.getString("status"); 
        message = jsonResponse.getString("message"); 

        if (status.equals("success")) { 
         if (pDialog.isShowing()) pDialog.dismiss(); 
         handler.sendEmptyMessage(1); 
         response.body().close(); 

        } else if (status.equals("failure")) { 
         if (pDialog.isShowing()) pDialog.dismiss(); 
         handler.sendEmptyMessage(-1); 
         response.body().close(); 

        } else if (status.equals("error")) { 
         if (pDialog.isShowing()) pDialog.dismiss(); 
         handler.sendEmptyMessage(0); 
         response.body().close(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
        if (pDialog.isShowing()) pDialog.dismiss(); 
        handler.sendEmptyMessage(2); 
        response.body().close(); 
       } 
      } 
     } 
    }); 
} 

Logcatに誤りがないこの問題で私を助けてください..

+0

成功メッセージが表示されたら、ダイアログを閉じるには、pdialog.dismiss();をクリックします。ダイアログボックスを閉じます。 –

+0

@ Mr.Popular既にコード内に表示されています。 –

+0

コードをデバッグして**これをチェックしてください** if(pDialog.isShowing())**返されるもの..返された場合、pDialogは常に表示されます... –

答えて

0

おそらく、UIスレッドで何かをしonResponseHandlerを使用して、あなたはまた、handleMessage

でSweetAlertDialogを解任すべきです
Handler handler = new Handler(new Handler.Callback() { 
      @Override 
      public boolean handleMessage(Message msg) { 
//... 
       if (pDialog.isShowing()) pDialog.dismiss(); 
       return false; 
      } 
     }); 
+0

私はすでにハンドラを使用していますclient.newCall(request).enqueue(new Callback(){ –

+0

はい、私はhandleMessageでダイアログを閉じる必要があります参照してください、 onResponseの中に直接はありません –

+0

私もそれを試しましたが、まだ問題があります...デバッグの時間後に私はコードがハンドラを確実に呼び出すことができないと言うことができます...私は私が何であるか分かりません同じ方法で同様の操作を行ったので、行方不明です。 –

関連する問題