RxJava 与 Retrofit 结合使用,史上最牛搭档


在这个列子里,只介绍RxJava和Retrofit的简单初级配合使用,最懒,意思就是说,你完全可以看着我的列子,不用管原理,直接套用就行,而这里没有对其封装,原生态的使用方法

  • 实现需求
    就做一简单的网络请求 。点击请求打印json数据

这里写图片描述

一、配置

  • 依赖
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.1.6'
    compile 'com.google.code.gson:gson:2.8.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

    //rx生命周期管理
    compile'com.trello:rxlifecycle:0.3.0'
    compile'com.trello:rxlifecycle-components:0.3.0'
  • 权限
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 网络状态权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

二、使用步骤

1、创建Service定义请求接口

package com.daqsoft.newrx;
import com.daqsoft.newrx.bean.Weather;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import rx.Observable;

/**
 * Created by yanbo on 2017/6/9.
 * 接口数据
 */

public interface HttpService {
    @POST("AppFiftyToneGraph/videoLink")
    Observable<RetrofitEntity> getAllVedioBy(@Body boolean once_no);

    //自己 的
    @GET("homePageWeather.action?region=510131")
    Observable<Weather> getWeatherData();

}

2、MainActivity里使用

看代码直观。

    /**
     * Retrofit加入rxjava实现http请求
     */
    private void  reQuest() {
        //1、手动创建一个OkHttpClient并设置超时时间
        okhttp3.OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(5, TimeUnit.SECONDS);

        //2、new Retrofit对象
        Retrofit retrofit = new Retrofit.Builder()
                .client(builder.build())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl("http://www.izaodao.com/Api/")
                .build();

//        加载框
        final ProgressDialog pd = new ProgressDialog(this);

        //3、Retrofit对象得到service对象
        HttpService apiService = retrofit.create(HttpService.class);
        //4、service对象方法获取observable对象,开始请求
        Observable<RetrofitEntity> observable = apiService.getAllVedioBy(true);
        observable.subscribeOn(Schedulers.io()).unsubscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        new Subscriber<RetrofitEntity>() {
                            @Override
                            public void onCompleted() {
                                if (pd != null && pd.isShowing()) {
                                    pd.dismiss();
                                }
                            }
                            @Override
                            public void onError(Throwable e) {
                                if (pd != null && pd.isShowing()) {
                                    pd.dismiss();
                                }
                            }

                            @Override
                            public void onNext(RetrofitEntity retrofitEntity) {
                                mTvMsg.setText("无封装:\n" + retrofitEntity.getData().toString());
                            }

                            @Override
                            public void onStart() {
                                super.onStart();
                                pd.show();
                            }
                        }

                );
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值