前面已经单独介绍了Retrofit和Rxjava的使用,不懂的伙伴可以查看
http://blog.csdn.net/qq_34211554/article/details/78981093 Retrofit使用介绍
http://blog.csdn.net/qq_34211554/article/details/78982301 Rxjava使用介绍
现在对两者结合进行封装
一、导入需要的依赖
/*rx-android-java*/ compile 'io.reactivex:rxjava:+' compile 'com.squareup.retrofit:adapter-rxjava:+' compile 'com.trello:rxlifecycle:+' compile 'com.trello:rxlifecycle-components:+' /*rotrofit*/ compile 'com.squareup.retrofit2:retrofit:+' compile 'com.squareup.retrofit2:converter-gson:+' compile 'com.squareup.retrofit2:adapter-rxjava:+' compile 'com.google.code.gson:gson:+'二、添加网络权限
<!-- 访问网络,网络定位需要上网 --> <uses-permission android:name="android.permission.INTERNET" />三、定义访问接口,返回Observable<T>
public interface HttpService { //登陆 @FormUrlEncoded @POST("user/login/login") Observable<UserInfoBean> login(@FieldMap Map<String, Object> map); ...一般把所有访问的接口都定义在该类中 }四、创建Okhttp工具类
public class OkhttpHelper { private static OkhttpHelper instance; private OkHttpClient mClient; public static OkhttpHelper getOkhttpHelper(){ if (instance == null){ synchronized (OkhttpHelper.class){ instance = new OkhttpHelper(); } } return instance; } public OkHttpClient getClient(){ if (mClient == null){ mClient=new OkHttpClient.Builder() .connectTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)//设置连接超时时间 .readTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)//设置读取超时时间 .writeTimeout(HttpConfig.HTTP_TIME, TimeUnit.SECONDS)//设置写入超时时间 .addInterceptor(InterceptorUtil.HeaderInterceptor())//添加其他拦截器 .addInterceptor(InterceptorUtil.LogInterceptor())//添加日志拦截器 .build(); } return mClient; } }五、创建Retrofit工具类
public class RetrofitHelper { private static Retrofit mRetrofit; private static OkHttpClient mClient; public static HttpService getHttpService(){ if (mClient == null){ if (mClient == null){ OkHttpClient mClient = OkhttpHelper.getOkhttpHelper().getClient(); } mRetrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(mClient) .build(); } return mRetrofit.create(HttpService.class); } }六、创建对外使用的网络访问工具类
public class HttpUtils { public static <T> void getData(Observable<T> observable, Action1<T> action1) { observable.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(action1); } public static <T> void getData(Observable<T> observable, Observer<T> observer) { observable.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer); } }上述封装已经完成,下面是进一步精简,主要是定义自己的Observer,也可以选择不用
public abstract class MyObserver<T> implements Observer<T>{ @Override public void onNext(Object o) { onSuccess(o); } @Override public void onError(Throwable e) { onFailed(e); } @Override public void onCompleted() { } public abstract void onSuccess(Object o); public abstract void onFailed(Throwable e); }做这一步操作,主要目的是,在使用时创建Observer对象是,不用每个方法都重写,只需要重写成功和失败即可