通过对RxAndroid、Retrofit和OkHttp的学习,用它们整合搭建一个基于MVVM的项目。
使用Android Jetpack组件 Databinding、ViewModel、LiveData、Lifecycle
通过本篇Blog可以学习到如何利用这些框架整合搭建一个项目。
本篇Blog所用源码Github地址:MVVM Demo
下面开始进入正题,本篇以获取公众号列表数据展示为例。文章目录按照Demo项目从数据到业务逻辑处理最后到界面展示。
准备工作
-
添加依赖
依赖的版本一定要匹配,不然会出现一些乱七八糟的问题。细节可以看我之前的Blog集成错误因为在Retrofit2中使用了JDK8的新特性,所以除了依赖,还要添加支持。
// Support new features of JDK1.8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// Android JetPack,也可以分别添加使用具体的某个组件的依赖
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
// okHttp 3.14
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
// Retrofit 2.9
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
// Convert Google Json(Convert the result to Model)
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
// Retrofit CallAdapter convert to RxJava
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
// RxAndroid 3.0
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
- 声明权限
<uses-permission android:name="android.permission.INTERNET" />
-
项目目录
建好目录后,就可以开工了。
请求数据
该实例以玩Android为数据源。
我们使用OkHttp实现网络请求,Retrofit以接口的形式回调,通过RxAndroid更好的处理业务和展示工作。
- 创建接口
首先,创建公众号列表数据的接口MpService.java,然后声明这个geListData()
@GET("wxarticle/chapters/json")
Observable<BaseData<List<MpBean>>> getListData();
// 也可以使用GET或者POST来请求
/**
* Request Buyer Data for GET
* @param id dateId
* @return buyer data
*/
@GET("buyer/date/get")
Observable<BaseData<Map<String, Map<String, String>>>> getBuyerData(@Query("dateId") String id);
/**
* Request Buyer Data for POST
* @param dateId dateId
* @return buyer data
*/
@FormUrlEncoded
@POST("buyer/date/get")
Observable<BaseData<Map<String, Map<String, String>>>> postBuyerData(@Field("dateId") String dateId);
- 代理对象
有了接口并不能直接使用,我们需要获取代理对象,在MainModel.java中通过Retrofit的create方法传入接口就可以了。当然,我们要先创建一个Retrofit对象