Dagger2是Google提供的依赖注入框架,依赖注入为Android中组件之间的解耦提供了很好的解决方案。
Retrofit2是一套RESTful架构的Android(Java)客户端实现,基于注解,提供多种数据交互类型(JSON、protobuf、XML等),网络请求(POST,GET,PUT,DELETE等)封装。
RxJava是一个在 Java VM上使用可观测的序列来组成异步的、基于事件的程序的库。
相关链接
Dagger2: https://github.com/google/dagger
Retrofit2:http://square.github.io/retrofit/
RxJava:https://github.com/ReactiveX/RxJava
本文旨在将目前在项目中实践出的这套网络框架整理出来,和广大读者一起交流共同提升。本文以Retrofit2的使用、RxJava的封装、和Dagger2的注入顺序讲述该网络交互框架。
Retrofit2的使用
讲述Retrofit2在项目中的应用之前,在此简要描述其基本使用知识。
Retrofit2的使用遵循两个基本步骤,先定义网络接口,并通过接口指定执行机制;使用时通过Retrofit Builder构建实例,并通过Retrofit.create() 方法创建接口实例,并使用之。
Retrofit 2 网络请求接口定义
Retrofit2支持通过网络接口来指定执行机制,默认是支持Call和Future类型的,RxJava的支持需要在Retrofit2的构造器中额外的指定适配器进行转换。网络接口定义如下:
interface GitHubService {
@GET("/repos/{owner}/{repo}/contributors")
Call<List<Contributor>> repoContributors(..);
@GET("/repos/{owner}/{repo}/contributors")
Observable<List<Contributor>> repoContributors2(..);
@GET("/repos/{owner}/{repo}/contributors")
Future<List<Contributor>> repoContributors3(..);
}
对于其同步调用和异步调用,以Call类型为例,如下:
Call<List<Contributor>> call =
gitHubService.repoContributors("square", "retrofit");
// 同步调用
response = call.execute();
// 异步调用
call.enqueue(new Callback<List<Contributor>>() {
@Override void onResponse(/* ... */) {
// ...
}
@Override void onFailure(Throwable t) {
// ...
}
});
Retrofit 2 初始化
Retrofit的构造器可以指定OkHttp支持,并且指明特定的 converter 或者 execute 机制。converter即网络交互数据解析器,包括JSON、protobuf、XML等,executer可以理解成Call Adapter Factory ,RxJava的支持要求在构造器中指定RxJavaCallAdapterFactory。
还是以GitHubService的使用为例。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.client(client)
.addConverterFactory(ProtoConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())