android-async-http取消请求

  1. 前言

           关于android-async-http诸多,相信大家都有一定的了解。我在这里只简单的说一下它的取消请求这一块。所有结论都是在同一个Context情况下。

  2. 能被取消请求的请求

    android-async-http能被取消请求的请求必须传入一个Context,否则则没有任何效果。以简单的get请求为例。

get(context, url, params, responseHandler);

        下面是一个网络请求类:

/**
 * 网络请求
 * @author Yang
 * @date 2015年3月16日 下午2:58:13
 */
public class FMHttpClient {
 
 private AsyncHttpClient client;
 
 public FMHttpClient() {
  client = new AsyncHttpClient();
 }
 
 /**
  * 获取AsyncHttpClient对象。
  * @return
  */
 public AsyncHttpClient getAsyncHttpClient(){
  return client;
 }
 
 /**
  * Get请求。
  * @param context
  * @param url
  * @param params
  * @param responseHandler
  * @return RequestHandle
  */
 public RequestHandle get(Context context,String url, RequestParamparams,ResponseHandlerInterface   responseHandler){
  return client.get(context, url, params, responseHandler);
 } 
 
 /**
  * 取消同一个Context下所有待执行的网络请求。
  * @param context
  * @param mayInterruptIfRunning 是否同时取消正在进行的网络请求
  */
 public void cancelRequests(Context context,boolean mayInterruptIfRunning){
  client.cancelRequests(context, mayInterruptIfRunning);
 }
 
 
 /**
  * 取消所有待执行的网络请求。
  * @param mayInterruptIfRunning 是否同时取消正在进行的网络请求
  */
 public void cancelAllRequests(boolean mayInterruptIfRunning){
  client.cancelAllRequests(mayInterruptIfRunning);
 }
 
}

  3.    取消请求的三种方式

      (1) 第一种取消请求

cancelRequests(Context context, boolean mayInterruptIfRunning);//在AsyncHttpClient中

      (2) 第二种取消请求

cancelAllRequests(boolean mayInterruptIfRunning);//在AsyncHttpClient中

      (3) 第三种取消请求

cancel(boolean mayInterruptIfRunning) //在RequestHandle中

      下面请看主程序实现类:

public class MainActivity extends Activity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  String url1 = "https://www.baidu.com/";
  FMHttpClient client = new FMHttpClient();
  RequestHandle rd1 = client.get(this, url1, null, new AsyncHttpResponseHandler(){
   @Override
   public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    System.out.println("content1 size: "+arg2.length);
   }
   
   @Override
   public void onFailure(int arg0, Header[] arg1, byte[] arg2,
     Throwable arg3) {
    System.out.println("onFailure1");
   }
   
   @Override
   public void onFinish() {
    System.out.println("onFinish1");
   }
   
  });
  
  String url2 = "http://www.hao123.com/";
  RequestHandle rd2 = client.get(this, url2, null, new AsyncHttpResponseHandler(){
   @Override
   public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
    System.out.println("content2 size: "+arg2.length);
   }
   
   @Override
   public void onFailure(int arg0, Header[] arg1, byte[] arg2,
     Throwable arg3) {
    System.out.println("onFailure2");
   }
   
   @Override
   public void onFinish() {
    System.out.println("onFinish2");
   }
   
  });
  //rd1.cancel(true);
  //client.cancelRequests(this, true);
  //client.cancelAllRequests(true);
  System.out.println("result1-->"+rd1.isCancelled());
  System.out.println("result2-->"+rd2.isCancelled());
  
 }
}

       两个或者两个以上的请求: 

       使用第一种和第二中一样,则打印结果都为true,两个请求都被取消。假设需求要求各个取消请求互不影响的话,那这两钟方法都不可取,而需求是要求所有请求都被取消,那么这两种都可以使用,不过优先选择第二种。

       使用第三种取消请求,对应其中某一个请求,则此请求将会被取消,而其他请求不被影响。

        一个请求:

        三种方式随便用。

 

 

 

你可能感兴趣的:(cancel)