强制停止httpClient httpget?

Jac*_*ani 1 android android-asynctask

目标根本不能阻止 httpClienthttpget

当我点击进度对话框cancel按钮RequestAsyncTask应停止和终止,但它不是,请求仍在运行,直到其完成

这是我的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();   
        }


    }   
  }
Run Code Online (Sandbox Code Playgroud)

任何建议请如何http在Android中完全停止获取或发布请求!

Ste*_*ett 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();
        }});
Run Code Online (Sandbox Code Playgroud)

  • @KevinM随着[httpGet.abort()](http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html#abort%28%29),您可以关闭而不实际的连接关闭整个客户. (2认同)