前言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,两个请求都被取消。假设需求要求各个取消请求互不影响的话,那这两钟方法都不可取,而需求是要求全部请求都被取消,那么这两种均可以使用,不过优先选择第二种。
使用第三种取消请求,对应其中某一个请求,则此请求将会被取消,而其余请求不被影响。
一个请求:
三种方式随便用。