2013-10-01 3 views
1

цель не может вообще остановить и httpClient И httpgetforce Стоп httpClient httpget?

, когда я нажимаю на прогресс диалогового cancel кнопку Request и AsyncTask должны остановиться и прервать но его нет, запрос все еще работает, пока ее закончил

это мой AsyncTask код испытания

public class getAlbuminfo extends AsyncTask<String,String, String> { 

    ProgressDialog progressDialog; 
    JSONObject data  = null; 
    boolean prependMore = false; 

    //Http 
    HttpClient httpClient; 
    HttpGet httpget; 

    /********** 
    * Begien 
    */ 
    @SuppressWarnings("deprecation") 
    @Override 
    protected void onPreExecute() { 

     if (onlypagenat == false) 
     { 
      progressDialog = new ProgressDialog(context); 
      progressDialog.setCancelable(false); 
      progressDialog.setIndeterminate(true); 
      progressDialog.setMessage(context.getResources().getString(R.string.opening_album)); 
      progressDialog.setButton(context.getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       cancel(true); 
       finish(); 
      }}); 
      progressDialog.show();      
     }  

     prependMore = appendMore; 
     appendMore = false; 

    } 
    /************** 
    * IF Canceled 
    */ 
    @Override 
    protected void onCancelled() { 

     Log.i("Http Response:", "Aborted"); 

     if (httpget != null) 
     { 
      httpClient.getConnectionManager().shutdown(); 
      httpget.abort(); 
     } 
    }  
    /**************** 
    * Make Request 
    */ 
    @Override 
    protected String doInBackground(String... params) { 

     String response = null; 
     String url  = Api.foruminfo.forum_api_url+"/album.php?albumid="+albumid+"&page="+page+"&onlypagenat="+(onlypagenat?1:0); 

     httpClient = new DefaultHttpClient(); 
     httpget = new HttpGet(url); 

     //Add Values User Headers and Cookies 
     httpget.addHeader("Cookie", Api.forumCookies()); 
     httpget.setHeader("Accept-Charset", "utf-8"); 

     // Making HTTP Request 
     try { 
       HttpResponse serverResponse = httpClient.execute(httpget); 

       Log.i("Http HttpResponse:", serverResponse.toString()); 

       //Set Response 
       response = EntityUtils.toString(serverResponse.getEntity()); 

       } catch (ClientProtocolException e) {e.printStackTrace(); 

      } catch (IOException e) { e.printStackTrace();} 


    return response; 
    } 
    /********************** 
    * Done 
    */ 
    @Override 
    protected void onPostExecute(String response) { 

        Log.i("Http HttpResponse:", response); 

     if (onlypagenat == false) 
     { 
      progressDialog.dismiss(); 
     } 


    } 
    } 

Любые советы, пожалуйста, как полная остановка Получить или сообщение http запрос в андроид !!

ответ

6

Метод AsyncTask.cancel() не имеет ничего общего с отменой запроса http. cancel(true) только предупреждает, что onPostExecute() будет вызываться после того, как doInBackground завершит задание. Вместо этого будет вызываться OnCancelled().

Если вы хотите отменить запрос HTTP использовать HttpClient.getConnectionManager().shutdown();

 public void onClick(DialogInterface dialog, int which) { 
      cancel(true); 
      httpClient.getConnectionManager().shutdown(); 
      finish(); 
     }}); 
+0

Наконец род нашел решение, спасибо: D его прекрасно работали в настоящее время, направлены в состоянии прервать запрос HTTP;) Еще раз спасибо –

+1

Won 't это убить все соединения в пуле соединений? Как насчет того, чтобы убить только соединение, которое используется для этого запроса, чтобы вы не убивали других запросов, которые выполняются в данный момент? –

+2

@KevinM С помощью [httpGet.abort()] (http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html#abort%28%29) вы можете закрыть фактическое соединение без закрытия всего клиента. –

Смежные вопросы