android-async-http取消請求

  1. 前言java

           關於android-async-http諸多,相信你們都有必定的瞭解。我在這裏只簡單的說一下它的取消請求這一塊。全部結論都是在同一個Context狀況下。android

  2. 能被取消請求的請求網絡

    android-async-http能被取消請求的請求必須傳入一個Context,不然則沒有任何效果。以簡單的get請求爲例。async

get(context, url, params, responseHandler);

        下面是一個網絡請求類:ide

/**
 * 網絡請求
 * @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.    取消請求的三種方式this

      (1) 第一種取消請求url

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

      (2) 第二種取消請求code

cancelAllRequests(boolean mayInterruptIfRunning);//在AsyncHttpClient中

      (3) 第三種取消請求對象

cancel(boolean mayInterruptIfRunning) //在RequestHandle中

      下面請看主程序實現類:get

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,兩個請求都被取消。假設需求要求各個取消請求互不影響的話,那這兩鍾方法都不可取,而需求是要求全部請求都被取消,那麼這兩種均可以使用,不過優先選擇第二種。

       使用第三種取消請求,對應其中某一個請求,則此請求將會被取消,而其餘請求不被影響。

        一個請求:

        三種方式隨便用。

相關文章
相關標籤/搜索