美文网首页
Retrofit2.0+RxJava1.0应用

Retrofit2.0+RxJava1.0应用

作者: one_mighty | 来源:发表于2017-03-23 23:56 被阅读0次

    一、简介

            在博客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

    GET

            5.2、POST

    POST

    相关文章

      网友评论

          本文标题:Retrofit2.0+RxJava1.0应用

          本文链接:https://www.haomeiwen.com/subject/djqxottx.html