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()中调用
阅读全文
0 0
- retrofit http取消请求
- Rxjava+Retrofit取消网络请求
- 用 Retrofit 2 简化 HTTP 请求
- 用 Retrofit 2 简化 HTTP 请求
- 用 Retrofit 2 简化 HTTP 请求
- RxJava2和Retrofit Http请求的封装
- 如何使用OkHttp/Retrofit重试HTTP请求
- retrofit请求
- Retrofit 请求
- 用 Retrofit 2 简化 HTTP 请求(Jake Wharton)
- 使用Retrofit进行Http、Https网络请求(快速上手)
- RxJava+Retrofit+MVP 封装带有加载框的Http请求
- 基于Retrofit + RxJava的http请求的封装
- 使用Retrofit进行Http、Https网络请求(快速上手)
- RxJava结合Retrofit如何避免覆盖http请求(终端当前http请求)
- android+mvp+retrofit+rxjava+okhttp的demo支持加载对话框消失取消请求
- Android使用 httpClient取消http请求的方法
- Android使用 httpClient取消http请求的方法
- HTML的严格模式和混杂模式
- JSON字符串与JSON对象的区别
- 第一次面试sgw总结
- hdu6103-暴力
- 3361-数据结构实验之图论四:迷宫探索
- retrofit http取消请求
- Vin码识别-车架号识别为APP功能增添亮点
- YUV采样格式与存储格式
- Storm入门与实践(1)入门介绍
- Tornado之json api开发
- Vue实现tab切换
- 进度事件
- Python函数 extend()和append()的区别
- LeetCode 95 Unique Binary Search Tree II(Python详解及实现)