一、简介
在博客Retrofit2应用 中介绍了,在定义Retrofit网络请求接口时,我们的返回结果是Call<T>,但是在结合RxJava 时,就不能返回一个以OkHttp主类Call为对象的值,而是返回一个可以作为响应式编程RxJava开发库调用的Observable对象,而其他的创建Retrofit对象,接口参数及其注解都不需要发生太大变化,下面学习如何用Retrofit2.0+RxJava1.0 实现网络请求。
二、使用
1、添加依赖库
/*集成retrofit依赖*/
compile'com.squareup.retrofit2:retrofit:2.2.0'
/*与Rxjava集成时用到*/
compile'com.squareup.retrofit2:adapter-rxjava:2.1.0'
/*需要将对象与json数据转换时用到*/
compile'com.squareup.retrofit2:converter-gson:2.1.0'
/*集成rxjava需要的两个库*/
compile'io.reactivex:rxjava:1.0.14'
compile'io.reactivex:rxandroid:1.0.1'
2、创建接口
2.1、GET
@GET(Configs.VERSION_PATH)
//请求方式
Observable<VersionInfo> getVersionInfoRxjava();
2.2、POST
@FormUrlEncoded//编解码方式
@POST(Configs.ENGLISH_SENTENCE_PATH)
//请求方式
Observable<EnglishSentence> getEnglishSentenceRxjava(
@Field("count")intcount,//参数一
@Field("showapi_appid") String showapi_appid,//参数二
@Field("showapi_sign") String showapi_sign);//参数三
3、构造Retrofit
OkHttpClient okHttpClient =new OkHttpClient.Builder()
.connectTimeout(5000,TimeUnit.SECONDS)
.readTimeout(5000,TimeUnit.SECONDS)
.build();
okHttpClient.connectTimeoutMillis();
Retrofit retrofit =newRetrofit.Builder()
.baseUrl(Configs.BASE_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
ApiService apiService= retrofit.create(ApiService.class);
4、代码使用
4.1、GET
retrofit.create(ApiService.class)
.getVersionInfoRxjava()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(newSubscriber() {
@Override
public void onCompleted() {
Log.d(TAG,"onCompleted() called");
}
@Override
public void onError(Throwable e) {
Log.d(TAG,"onError() called with: e = ["+ e +"]");
}
@Override
public void onNext(VersionInfo versionInfo) {
Log.e(TAG,versionInfo.getVersionName() +"-----------");
Log.e(TAG,versionInfo.getVersionCode() +"-----------");
}
});
4.2、POST
retrofit.create(ApiService.class)
.getEnglishSentenceRxjava(5,Configs.APPID_STRING,Configs.APPSIGN_STRING)
.flatMap(newFunc1<EnglishSentence,Observable<DataBean>>() {
@Override
public Observable<DataBean> call(EnglishSentence englishSentence) {
return Observable.from(englishSentence
.getShowapi_res_body()
.getData());
}})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(newObserver() {
@Override
public void onCompleted() {
Log.d(TAG,"onCompleted() called");}
@Override
public void onError(Throwable e) {
Log.d(TAG,"onError() called with: e = ["+ e +"]");}
@Override
public void onNext(DataBean dataBean) {
Log.e(TAG,dataBean.getChinese() +"-------------------");
Log.e(TAG,dataBean.getEnglish() +"-------------------");
}});
5、结果
5.1、GET
GET5.2、POST
POST
网友评论