android-async-http取消请求

  1. 前言

    关于android-async-http诸多,相信大家都有一定的了解。我这这里只简单的说一下它的取消请求这一块。所有结论都是在同一个Context情况下。

  2. 能被取消请求的请求

    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

android-async-http取消请求的相关文章

Android OkHttp + Retrofit 取消请求的方法

本文链接 前言 在某一个界面,用户发起了一个网络请求,因为某种原因用户在网络请求完成前离开了当前界面,比较好的做法是取消这个网络请求.对于OkHttp来说,具体是调用Call的cancel方法. 如何找到这一个网络请求并取消掉它呢? 操作大致分为3步.第一步,在建立请求时,给请求(request)添加标记:第二步,根据标记,找到请求:最后,取消这个请求. OkHttp中的tag 要取消一个请求,OkHttp中可以使用cancel方法,参考. OkHttp的request对象有tag.可以根据ta

Android AlarmManager的取消

取消alarm使用AlarmManager.cancel()函数,传入参数是个PendingIntent实例. 该函数会将所有跟这个PendingIntent相同的Alarm全部取消,怎么判断两者是否相同,android使用的是intent.filterEquals(),具体就是判断两个PendingIntent的action.data.type.class和category是否完全相同. 具体代码如下: 设置闹钟: // 指定启动AlarmActivity组件 Intent intent =

Android 扩展OkHttp支持请求优先级调度

在当今这个App泛滥的时代,网络请求几乎是每一个App必不可少的一部分,请求几乎遍布App的每一个界面中.我们进入A界面后,App发起了一系列请求,这时候假如还有一部分请求没有被执行,我们就进入B界面开始新的网络请求,这时候原来A界面的网络请求我们有两个选择: 取消A界面的所有未开始执行的网络请求 不取消A界面的所有网络请求,但是B界面的请求要优先于A界面的请求执行,B界面的网络请求执行完毕后再去执行A界面未执行完毕的请求. 对于第一种情况,我们很好做到,在Activity的onDestroy回

抓包工具Fidder详解(主要来抓取Android中app的请求)

抓包工具Fidder详解(主要来抓取Android中app的请求) 今天闲着没吊事,来写一篇关于怎么抓取Android中的app数据包?工欲行其事,必先利其器,上网google了一下,发现了一款神器:Fiddler,这个貌似是所有软件开发者必备神器呀!这款工具不仅可以抓取PC上开发web时候的数据包,而且可以抓取移动端(Android,Iphone,WindowPhone等都可以),太强大了,以前搞web的时候,知道有一款叫做HttpWatch工具,可以抓取web的请求数据包的,但是和这款神器来

Retrofit2.0+ RxJava 优雅的取消重复避免并取消请求(十一)

Tamic/文 地址:http://blog.csdn.net/sk719887916/article/details/54575137 前几篇主要介绍了retrofit基本使用,结合rxJava的案列,以及RxJava结合retrofit的封装,包括公用参数,局部参数请求头添加,缓存,https, 文件上下传,结果解析,异常处理等,还有一些技巧,那么还有一个比较关键的是取消问题. 两者结合技巧可点击阅读:http://blog.csdn.net/sk719887916/article/deta

Android开发之网络请求通信专题(二):基于HttpClient的文件上传下载

上一篇专题Android开发之网络请求通信专题(一):基于HttpURLConnection的请求通信我们讲解了如何使用httpurlconnection来实现基本的文本数据传输.一般在实际开发中我们可以用于传输xml或者json格式的数据.今天我们来讲解另外一种http网络请求的方式:httpclient,并实现文件的上传和下载. 在这里插个题外话,其实这些网络请求有很多第三方jar包可以使用,这些包都封装得很好了.如果只是想使用,我们就直接拿别人得jar包来用就好.博主这里推荐一个叫xuti

(转载)Android之三种网络请求解析数据(最佳案例)

[置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 小武:相信大家都用过网络请求解析数据,只是方法不一样而已,但是,逻辑都是差不多的: 一:AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个

android volley 发送 POST 请求

Map<String, String> params = new HashMap<String, String>(); params.put("fromUser", "lesliefang"); params.put("toUser", "xiaojun"); JsonObjectRequest newMissRequest = new JsonObjectRequest( Request.Method

基于Android Volley的网络请求工具

基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Release,jar包.直接下载 二.Volley基本处理流程: 1.应用初始化Volley.2.Volley创建一个RequestQueue.NetworkDispatcher组及Network.3.RequestQueue即一个Request队列,RequestQueue会创建一个Executor