概述
网络请求框架是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用的好的话,感觉写出的代码看上去也比较炫酷。