简单说一下框架的主要流程:
1.在主工程的gradle的引入相关库。
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
// implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//耗时操作完成后,事件消费在主线程,添加此框架支持
implementation 'io.reactivex:rxandroid:1.2.0'
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
//添加rxjava对应适配器
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
在项目的gradle里配置:
jcenter()
maven {
url "https://jitpack.io"
name 'Google'
}
google()
2.接下来就是Retrofit的封装。
public void getRetrofit() {
if (mRetrofit == null) {
client = new OkHttpClient.Builder()
.connectTimeout(1000L, TimeUnit.MILLISECONDS)
.readTimeout(1000L, TimeUnit.MILLISECONDS)
.writeTimeout(1000L, TimeUnit.MILLISECONDS)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request().newBuilder();
builder.addHeader("token", Constanct.TOCKEN); //header 里添加tocken。
Request request = builder.build();
return chain.proceed(request);
}
})
.addInterceptor(new LoggingInterceptor())//添加日志拦截器
// .cache()
.build();
}
mRetrofit = new Retrofit.Builder()
.baseUrl(DataManager.BASEURL)//基地址
.client(client)
.addConverterFactory(factory)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
public RetrofitService getService() {
return mRetrofit.create(RetrofitService.class);
}
3.RxJava的使用。
//这里使用了观察者模式。
public <T> void RequestHttp(Observable<T> obs,final ResultListener<T> listener){
compositeSubscription.add((obs
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<T>() {
@Override
public void onCompleted() {
if(null != listener){
listener.onCompleted();
}
}
@Override
public void onError(Throwable e) {
if(null != listener){
listener.onCompleted();
}
}
@Override
public void onNext(T t) {
if(null != listener && null != t){
listener.responseSuccess(t);
}
}
})));
}
3.通过反射和注解的方式对bean类解析
@FormUrlEncoded
@POST("micro/oa/notice/list")
Observable<LoginBean> postHomeTitleNews(@Field("param") String param);
其大致流程如上所述另附demo一枚: