有关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());
});
}
});
}