Retrofit2.0+RxJava1.0应用

一、简介

        在博客Retrofit2应用 中介绍了,在定义Retrofit网络请求接口时,我们的返回结果是Call,但是在结合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 getVersionInfoRxjava();

        2.2、POST

@FormUrlEncoded//编解码方式

@POST(Configs.ENGLISH_SENTENCE_PATH)

//请求方式

Observable 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>() {

@Override

public Observable 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

GET

        5.2、POST

Retrofit2.0+RxJava1.0应用_第1张图片
POST




你可能感兴趣的:(Retrofit2.0+RxJava1.0应用)