Retorfit+RxJava的联合使用

有关Retofit 的知识请看http://blog.csdn.net/outofthinair/article/details/71663349
有关RxJava 的知识请看http://blog.csdn.net/outofthinair/article/details/71703027

当我们对这两者有了一个认识之后,我们来看一下它们的结合使用
在使用之前我们要添加依赖
标准的retrofit2 依赖
compile ‘com.squareup.retrofit2:retrofit:2.0.1’
支持Gson retrofit2 依赖
compile ‘com.squareup.retrofit2:converter-gson:2.0.1’
支持RxJava retrofit2 依赖
compile ‘com.squareup.retrofit2:adapter-rxjava:2.0.1’
RxAndroid 的依赖,主要提供主线程
compile ‘io.reactivex:rxandroid:1.1.0’
OkHttp 的拦截器
compile ‘com.squareup.okhttp3:logging-interceptor:3.4.1’

上面的依赖要添加
支持Gson retrofit2 依赖(自动解析Json )
compile ‘com.squareup.retrofit2:converter-gson:2.0.1’
支持RxJava retrofit2 依赖
compile ‘com.squareup.retrofit2:adapter-rxjava:2.0.1’
RxAndroid 的依赖,主要提供主线程
compile ‘io.reactivex:rxandroid:1.1.0’
OkHttp 的拦截器()
compile ‘com.squareup.okhttp3:logging-interceptor:3.4.1’

//上面的依赖选择性加入
一般都要支持RxJava
和Gsonn

//下面以Post请求为例
**1.1.定义一个接口(封装URL地址和数据请求)
这里和单独使用Retorfit 有一定的不同 看代码**
/**
* Use:数据的请求接口
* Author:陈懿鹏
* Data:2017/5/23.
*/

public interface DataRequestApi {

/**
 *FirstHand 首次握手
 * @param type app类型 为ANDROID
 * @param dev_id 设备标识
 * @param ver_code 版本号
 * @param tick 时间戳
 * @param sign 签名
 * @return
 */

@POST(UrlConnect.FRIST_HAND)
@FormUrlEncoded

//不同点 这里返回的不再是Call对象了,而是一个被观察者对象
//里面的泛型就是我们想要的数据封装Bean
Observable firstHand(@Field(“type”)String type,@Field(“dev_id”)String dev_id,
@Field(“ver_code”)int ver_code,@Field(“tick”)String tick,
@Field(“sign”)String sign);

}

2.2.实例化Retrofit ,并返回 请求接口
/**
* 获得Retrofit 的请求接口
* @return
*/

public static DataRequestApi getDataRequestApi(String baseUrl){



    //日志拦截器打印日志
    HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
        @Override
        public void log(final String message) {
            //打印retrofit日志
            Log.i("RetrofitLog", "retrofitBack = " + message);


        }
    });
    //设置log的级别
    loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

    //将网络请求交给OkHttp
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(loggingInterceptor).build();

    //实例化Retrofit2
    Retrofit retrofit =new Retrofit.Builder()
            .client(client)
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())

            .build();
    //调用请求接口
    return retrofit.create(DataRequestApi.class);

}

3.调用 开始请求
@Override
public void first_hand(final Context context, final SharedPreferences preferences, String type, String dev_id, int ver_code, String tick) {
//生成签名
StringBuffer sb = new StringBuffer();
sb.append(UrlConnect.PUBLIC_KEY)
.append(type)
.append(dev_id)
.append(ver_code)
.append(tick);
//Md5加密
String sign_ = ModelUtils.md5(sb.toString());
String sign=sign_.toUpperCase();

    Log.d("sign",sign);

    //获得调用接口
    DataRequestApi dataRequestApi = ModelUtils.getDataRequestApi(UrlConnect.BESE_URL);
    //请求网络
    final Observable firstHand = dataRequestApi.firstHand(type, dev_id, ver_code, tick, sign);
    //给被观察者设置线程
    firstHand.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .map(new Func1() {
                @Override
                public FirstHandBean call(FirstHandBean firstHandBean) {
                    return firstHandBean;
                }
            })
            .subscribe(new Observer() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(FirstHandBean firstHandBean) {

           //这里就会得到数据回调
           Log.d("onNext",firstHandBean.toString());



                            });



                }
            });
}

你可能感兴趣的:(Retorfit+RxJava的联合使用)