Retrofit与RxJava相结合的网络请求封装
2016-08-23 10:32
323 查看
公司里项目已经换成了RetrofitClient与RxJava相结合的网络请求封装了,前一段时间一直忙着开发任务,现在终于有时间了解一下网络请求封装这一块了。
先创建一个Demo工程,目录我就不展示了。
在src目录下的build.gradle文件中注入依赖,需要添加的依赖如下
添加好依赖以后,我按照Retrofit的开发文档一步一步完成封装
首先我们创建一个类,完成一些初始化的工作
然后设置baseUrl,创建一个URLHelper的类来统一管理URL
创建一个类完成Observable事件的处理,其中RxHttpHelper、HttpErrorInfo和RequestErrorThrowable的代码就不贴出来了,这三个类都是在处理接口返回错误时对应的文字信息
MyService来统一管理@POST请求的URL和网络请求的调用
实际调用接口时的URL = baseUrl + @POST
以上就是关于Retrofit与RxJava相结合的网络请求封装的内容,下面我们来看一下实际调用是的代码以及结果
请求的URL:http://192.168.0.101/api/account_1_4/GenCorpRegCode/api/
请求的JSON:{"Mobilephone":"15663195534","SourceID":"1222","ServerFrom":"","appId":1}
返回的数据:{
"processTime": "2016-08-23 01:48:21",
"process_status": "-1",
"errorMessage": "申请失败,请联系管理员!",
"errorCode": null
}
先创建一个Demo工程,目录我就不展示了。
在src目录下的build.gradle文件中注入依赖,需要添加的依赖如下
compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2' compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.squareup.retrofit2:converter-gson:2.0.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
添加好依赖以后,我按照Retrofit的开发文档一步一步完成封装
首先我们创建一个类,完成一些初始化的工作
public class RetrofitClient { /** * 所有post请求form的KEY */ public static final String POST_FIELD_NAME = "Json"; private Retrofit retrofit; public RetrofitClient() { retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .baseUrl(URLHelper.getInstance().URL) .client(getHttpClient()) .build(); } /** * 自定义OkHttpClient 设置超时和LOG * * @return */ private OkHttpClient getHttpClient() { HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); return new OkHttpClient.Builder() .connectTimeout(60, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) .writeTimeout(20, TimeUnit.SECONDS) .addInterceptor(logging) .retryOnConnectionFailure(true) .build(); } public MyService getService(){ return retrofit.create(MyService.class); } }
然后设置baseUrl,创建一个URLHelper的类来统一管理URL
public String URL = "http://192.168.0.101:80/api/"; public static URLHelper getInstance(){ return Singleton.instance; }
创建一个类完成Observable事件的处理,其中RxHttpHelper、HttpErrorInfo和RequestErrorThrowable的代码就不贴出来了,这三个类都是在处理接口返回错误时对应的文字信息
public class InternetAPI { MyService myService; public InternetAPI(){ myService = new RetrofitClient().getService(); } public Observable<GetCorpRegCodeResponse> getCorpRegCode(GetCorpRegCodeRequest request){ return myService.getCorpRegCode(request) .onErrorResumeNext(new Func1<Throwable, Observable<? extends GetCorpRegCodeResponse>>() { @Override public Observable<? extends GetCorpRegCodeResponse> call(Throwable throwable) { return Observable.error(RxHttpHelper.convertIOEError(throwable)); } }) .flatMap(new Func1<GetCorpRegCodeResponse, Observable<GetCorpRegCodeResponse>>() { @Override public Observable<GetCorpRegCodeResponse> call(GetCorpRegCodeResponse getCorpRegCodeResponse) { if (getCorpRegCodeResponse == null) { return Observable.error(new RequestErrorThrowable(HttpErrorInfo.CODE_OF_PARSE_REQUEST_FAILURE, HttpErrorInfo.MSG_OF_PARSE_REQUEST_FAILURE)); } if ("0".equals(getCorpRegCodeResponse.result)) { return Observable.just(getCorpRegCodeResponse); } else { if (getCorpRegCodeResponse.errorCode == null) { return Observable.error(new RequestErrorThrowable(-1, getCorpRegCodeResponse.errorMsg)); } return Observable.error(new RequestErrorThrowable(Integer.parseInt(getCorpRegCodeResponse.errorCode), getCorpRegCodeResponse.errorMsg)); } } }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); } }
MyService来统一管理@POST请求的URL和网络请求的调用
实际调用接口时的URL = baseUrl + @POST
<span style="font-size:18px;">public interface MyService { String API_ACCOUNT_GETCORPREGCODE = "account_1_4/GenCorpRegCode/api/"; @Multipart @POST(API_ACCOUNT_GETCORPREGCODE) Observable<GetCorpRegCodeResponse> getCorpRegCode(@Part(RetrofitClient.POST_FIELD_NAME)GetCorpRegCodeRequest request); }</span>
以上就是关于Retrofit与RxJava相结合的网络请求封装的内容,下面我们来看一下实际调用是的代码以及结果
GetCorpRegCodeRequest request = new GetCorpRegCodeRequest(); request.mobelPhone = "15663195534"; request.tmcId = "1222"; InternetHelper.getCorpRegCode(request).subscribe(new Action1<GetCorpRegCodeResponse>() { @Override public void call(GetCorpRegCodeResponse getCorpRegCodeResponse) { //调用成功 } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { //调用失败 } });
请求的URL:http://192.168.0.101/api/account_1_4/GenCorpRegCode/api/
请求的JSON:{"Mobilephone":"15663195534","SourceID":"1222","ServerFrom":"","appId":1}
返回的数据:{
"processTime": "2016-08-23 01:48:21",
"process_status": "-1",
"errorMessage": "申请失败,请联系管理员!",
"errorCode": null
}
相关文章推荐
- retrofit+RxJava+okhttp简便封装实现网络请求(详解)
- 最流行的网络请求框架Rxjava2+Retrofit完美封装
- (一)CommonLibrary之Retrofit+RxJava网络请求封装
- 封装Retrofit,RXJAVA,okhttp网络请求的工具
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- Retrofit和RxJava网络请求二次封装
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava结合Retrofit使用 自定义封装类结合泛型 请求网络数据+Fresco+RecyclerView+MVP分层
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- RxJava与Retrofit封装简单的网络请求(二)
- Retrofit,OkHttp拦截器,RxJava封装请求网络
- Android RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)
- Retrofit+Rxjava 网络请求的简单封装(一)(观察者模式)
- Retrofit+Rxjava 网络请求的完美封装(二)(观察者模式)
- 最流行的网络请求框架Rxjava2+Retrofit完美封装,郭霖
- Android 单例模式封装 RxJava+Retrofit 网络请求
- RxJava2+Retrofit2网络请求框架封装及使用
- Retrofit + RxJava + OkHttp 让网络请求变的简单-封装篇
- (一)最流行的网络请求框架Rxjava2+Retrofit完美封装
- RxJava+Retrofit+OkHttp深入浅出-终极封装二(网络请求)