retrofit http取消请求

来源:互联网 发布:淘宝外用增大药有用吗 编辑:程序博客网 时间:2024/06/05 15:16

1.Retrofit取消请求

Call<LoginResult> call = apiService.getData("Tamic", "1234");   call.enqueue(new Callback<LoginResult>() {   @Override   public void onResponse(Call<LoginResult> call, Response<LoginResult> response) {   }   @Override   public void onFailure(Call<LoginResult> call, Throwable t) {   }   });}

取消请求

直接用call实例进行cancel即可

call.cancel();

2.Rxjava取消订阅

遇到取消订阅的情况可以直接:
subscription.unsubscribe();
避免重复:
if (!subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
如果需要在非UI线程的情况,可以直接指定线程为IO线程。
observable.unsubscribeOn(Schedulers.io());

3.Retrofit2.0+ RxJava 取消请求

构建一个接口
主要管理rxJava的Subscription描述。这个东东可以理解为对一些事件所给的总Tag一样,你去办理身份证给的回执单一样,有了回执单你就可以追踪办理身份证的这个事情。

public interface RxActionManager<T> {    void add(T tag, Subscription subscription);    void remove(T tag);   void cancel(T tag);    void cancelAll();}

具体实现的RxApiManager主要处理真实的取消请求作用,维护rxjava的订阅池。

public class RxApiManager implements RxActionManager<Object> {   private static RxApiManager sInstance = null;   private ArrayMap<Object, Subscription> maps;  public static RxApiManager get() {    if (sInstance == null) {      synchronized (RxApiManager.class) {         if (sInstance == null) {              sInstance = new RxApiManager();           }        }      }        return sInstance;    }     @TargetApi(Build.VERSION_CODES.KITKAT)     private RxApiManager() {        maps = new ArrayMap<>();      }   @TargetApi(Build.VERSION_CODES.KITKAT)   @Override   public void add(Object tag, Subscription subscription) {        maps.put(tag, subscription);   }   @TargetApi(Build.VERSION_CODES.KITKAT)   @Override    public void remove(Object tag) {        if (!maps.isEmpty()) {           maps.remove(tag);         }     }  @TargetApi(Build.VERSION_CODES.KITKAT)   public void removeAll() {        if (!maps.isEmpty()) {           maps.clear();         }   }   @TargetApi(Build.VERSION_CODES.KITKAT)   @Override public void cancel(Object tag) {       if (maps.isEmpty()) {          return;        }      if (maps.get(tag) == null) {        return;      }     if (!maps.get(tag).isUnsubscribed()) {       maps.get(tag).unsubscribe();       maps.remove(tag);      }  }   @TargetApi(Build.VERSION_CODES.KITKAT)   @Override public void cancelAll() {        if (maps.isEmpty()) {          return;        }     Set<Object> keys = maps.keySet();      for (Object apiKey : keys) {            cancel(apiKey);       }    }}

使用
具体请求的subscription
Subscription subscription =retrofit 返回的subscription实例
这里写图片描述
加入管理池 RxApiManager.get().add(“my”, subscription);
取消 RxApiManager.get().cancel(“my”);
一般我们在在activity的 onDestroy(), Fragment的 onDestroyView()中调用
这里写图片描述

原创粉丝点击