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