前言java
關於android-async-http諸多,相信你們都有必定的瞭解。我在這裏只簡單的說一下它的取消請求這一塊。全部結論都是在同一個Context狀況下。android
能被取消請求的請求網絡
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,兩個請求都被取消。假設需求要求各個取消請求互不影響的話,那這兩鍾方法都不可取,而需求是要求全部請求都被取消,那麼這兩種均可以使用,不過優先選擇第二種。
使用第三種取消請求,對應其中某一個請求,則此請求將會被取消,而其餘請求不被影響。
一個請求:
三種方式隨便用。