Retorfit+RxJava的联合使用

来源:互联网 发布:suse linux 网关配置 编辑:程序博客网 时间:2024/05/21 09:24
有关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<FirstHandBean> firstHand = dataRequestApi.firstHand(type, dev_id, ver_code, tick, sign);    //给被观察者设置线程    firstHand.subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .map(new Func1<FirstHandBean, FirstHandBean>() {                @Override                public FirstHandBean call(FirstHandBean firstHandBean) {                    return firstHandBean;                }            })            .subscribe(new Observer<FirstHandBean>() {                @Override                public void onCompleted() {                }                @Override                public void onError(Throwable e) {                }                @Override                public void onNext(FirstHandBean firstHandBean) {           //这里就会得到数据回调           Log.d("onNext",firstHandBean.toString());                            });                }            });}
原创粉丝点击