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