標籤:
前言
關於android-async-http諸多,相信大家都有一定的瞭解。我這這裡只簡單的說一下它的取消請求這一塊。所有結論都是在同一個Context情況下。
能被取消請求的請求
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); } /** * 取消網路請求。 * @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,兩個請求都被取消。假設需求要求各個取消請求互不影響的話,那這兩鐘方法都不可取,而需求是要求所有請求都被取消,那麼這兩種都可以使用,不過優先選擇第二種。
使用第三種取消請求,對應其中某一個請求,則此請求將會被取消,而其他請求不被影響。
一個請求:
三種方式隨便用。
android-async-http取消請求