概述
网络请求框架是Android开发中必须使用的,之前用过的网络请求框架有Android-async-http,Okhttp等,本篇想基于Retrofit+RxJava简单的封装一套网络请求框架,不能用绝对的眼光去衡量这几个框架的优缺点,没有绝对的好与坏。我们知道目前使用最少的应该是Android-async-http,最火的莫过于Retrofit,但不能简单拿的概括为他们的好坏之分。当然,适合自己的才是最好的。
简介
Retrofit: Retrofit是Square公司开发的一款正对Android 网络请求的框架。底层基于OkHttp实现,OkHttp已经得到了google官方的认可。
RxJava:提供一套异步编程的API,这套API是基于观察者模式的,而且是基于事件流链式调用的,所以使用RxJava编写的代码的逻辑会非常简洁。
Retrofit与RxJava的结合
引用库
1 | //RxJava+Retrofit+Gson |
封装原理
1 | //发起请求类,进行了基本的api参数配置 |
1 | //用于添加用户身份token |
1 | /** |
compose的工具1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35/**
*包括线程调配,生命周期绑定,异常处理
*/
public class RxUtils {
//调配线程
public static <T> ObservableTransformer<T, T> switchThread() {
return upstream -> upstream
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
//异常处理
public static <T> ObservableTransformer<HttpResult<T>, T> convert() {
return upstream -> upstream
.map(result -> {
if (result.success()) {//如果成功
if (result.getData() == null) {
result.setData((T) new Object());
}
return result.getData();
}
//如果失败
throw new ServerException(result.getState(), result.getMessage());
})
.onErrorResumeNext((Function<Throwable, ObservableSource<? extends T>>) throwable -> {
return Observable.error(ExceptionProcessor.handle(throwable));
});
}
public static <T, E> ObservableTransformer<HttpResult<T>, T> group(LifecycleProvider<E> provider) {
return upstream -> upstream
.compose(RxUtils.convert())
.compose(RxUtils.switchThread())
.compose(provider.<T>bindToLifecycle());
}
}
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1 | public abstract class CommonObserver<T> implements Observer<T> { |
1 | public interface UserService { |
最终使用
1 | //以登录接口为例 |
总结
这一整套下来基本上能适用决大多数的请求场景,也比较灵活,随时可拆分更加个性化的功能。当然还是那句话,适合自己才是最好的。整合下来也能对RxJava的使用更加了解,RxJava用的好的话,感觉写出的代码看上去也比较炫酷。