2014-10-20 3 views
0

내 안드로이드 앱에서 서버로 요청을 보내고 있습니다. loopj의 AsyncHttpClient 라이브러리를 사용하고 있습니다. 진행률 대화 상자가 취소 된 경우 (뒤로 키를 눌렀을 때) 요청을 취소하려고 시도했지만 실제로 진행되는 것은 ProgressDialog가 취소되지만 요청이 백그라운드에서 계속 작동하며 완료되면 다른 작업으로 이동합니다 (진행 대화 상자가 취소되지 않았을 때 원하는 동작이므로 괜찮습니다.) 여기진행 대화 상자가 취소 된 경우 AsyncHttpClient 요청 취소

내가해서 ProgressDialog의 setOnCancelListener을 설정 내 코드의 일부입니다 : 들어

client.cancelAllRequests(true); 

님의 방법을 변경하는

public static void login(final String email, final String password, 
      final Context context, final Context appContext, final Resources res) { 

     prgDialog = new ProgressDialog(context); 
     prgDialog.setMessage(res.getString(R.string.dialog_please_wait)); 
     prgDialog.setCancelable(true); 
     prgDialog.show(); 
     prgDialog.setOnCancelListener(new OnCancelListener() { 

      @Override 
      public void onCancel(DialogInterface dialog) { 
       client.cancelRequests(context, true); 
      } 
     }); 

     cookieStore = new PersistentCookieStore(appContext); 
     client.setCookieStore(cookieStore); 

     RequestParams params = new RequestParams(); 
     params.put("user_session[email]", email); 
     params.put("user_session[password]", password); 

     client.addHeader("Accept", HEADER); 

     client.post(getAbsoluteUrl(LOGIN_PATH), params, 
       new JsonHttpResponseHandler() { 

        @Override 
        public void onFailure(int statusCode, 
          org.apache.http.Header[] headers, 
          java.lang.String responseString, 
          java.lang.Throwable throwable) { 
         prgDialog.hide(); 
         if (statusCode == 404) { 
          Toast.makeText(context, 
            res.getString(R.string.error_404), 
            Toast.LENGTH_LONG).show(); 
         } else if (statusCode == 500) { 
          Toast.makeText(context, 
            res.getString(R.string.error_500), 
            Toast.LENGTH_LONG).show(); 
         } else if (statusCode == 401) { 
          Toast.makeText(context, 
            res.getString(R.string.login_401), 
            Toast.LENGTH_LONG).show(); 
         } else { 
          Toast.makeText(
            context, 
            "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]", 
            Toast.LENGTH_LONG).show(); 
         } 
        } 

        @Override 
        public void onSuccess(int statusCode, Header[] headers, 
          JSONObject response) { 
         if (statusCode == 200) { 
       //do something 
        } 
       }); 
    } 
+0

이걸 알아 냈나요? – user2635088

+0

정말로, @ user2635088 AsyncTasks 사용을 중단하기로 결정했고 이제는 모든 것이 훨씬 쉬워지는 Retrofit을 사용합니다. –

답변

2
client.post(context,getAbsoluteUrl(LOGIN_PATH), params, 
      new JsonHttpResponseHandler(); 

p에 컨텍스트 매개 변수 추가 ost.