1

httpClientANDの両方を停止することはまったくできません 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();   
        }


    }   
  }

AndroidでGetまたはPostリクエストを完全に停止する方法についてのアドバイスをお願いしますhttp!!

4

1 に答える 1

6

AsyncTask.cancel ()メソッドは、http リクエストのキャンセルとは関係ありません。cancel(true)doInBackground がジョブを終了した後に onPostExecute() が呼び出されるのを防ぐだけです。代わりに onCancelled() が呼び出されます。

http リクエストをキャンセルしたい場合は、HttpClient.getConnectionManager().shutdown();を使用します。

      public void onClick(DialogInterface dialog, int which) {
          cancel(true);
          httpClient.getConnectionManager().shutdown();
          finish();
        }});
于 2013-10-01T16:53:21.807 に答える