Rx系列学习笔记_RxJava+Retrofit进行简单请求
来源:互联网 发布:4g网络dns劫持 编辑:程序博客网 时间:2024/06/07 11:39
之前简单的学习了一下Rxjava的一些方法,现在来通过请求数据来继续学习。
1 .请求的API
public interface MyApi { /** * 获取列表信息 * @param createdate * @param code * @return */ @GET("getusedserialwarcardlist.ashx") Observable<ResponseData<List<RecordData>>> getRecordList(@Query("createdate") String createdate, @Query("Code") String code ); /** * 根据胎号获取具体的其他信息 */ @GET("getusedserialwarcardinfo.ashx") Observable<ResponseData<CheckDetailsData>> getRecordDetail1(@Query("couponnumber") String couponnumber ); /** * 根据胎号获取规格和花纹 * @param serialnumber * @return */ @GET("gettirejson.ashx") Observable<ResponseData<TyreData>> getRecordDetail2(@Query("serialnumber") String serialnumber); }
ResponseData用来包裹返回数据外层的一些状态码和错误信息
public class ResponseData<T> { private String ErrorCode; private String ErrorMsg; private String Status; private T Data; public String getErrorCode() { return ErrorCode; } public void setErrorCode(String ErrorCode) { this.ErrorCode = ErrorCode; } public String getErrorMsg() { return ErrorMsg; } public void setErrorMsg(String ErrorMsg) { this.ErrorMsg = ErrorMsg; } public String getStatus() { return Status; } public void setStatus(String Status) { this.Status = Status; } public T getData() { return Data; } public void setData(T Data) { this.Data = Data; }}
retrofit请求类,不忘忘记网络权限。
public class RetrofitRequest { private static String baseUrl="xxxxxxx"; private static RetrofitRequest instance; private static Retrofit.Builder retrofitBuild; private static Retrofit retrofit; private static MyApi myApi; public static RetrofitRequest getInstance() { if (instance == null) { synchronized (RetrofitRequest.class) { if (instance == null) { instance = new RetrofitRequest(); retrofitBuild = new Retrofit.Builder(); retrofitBuild.baseUrl(baseUrl); retrofitBuild.addCallAdapterFactory(RxJavaCallAdapterFactory.create()); retrofitBuild.addConverterFactory(GsonConverterFactory.create(new Gson())); retrofitBuild.addConverterFactory(ScalarsConverterFactory.create()); retrofit = retrofitBuild.build(); myApi = retrofit.create(MyApi.class); } } } return instance; } public MyApi getMyApi() { if (myApi == null) { myApi = retrofit.create(MyApi.class); } return myApi; } public void setBaseUrl(String baseUrl) { this.baseUrl = baseUrl; }}
现在来实现一个简单的请求,3个接口,接口2需要接口1的参数,然后3和1,2无关
final RetrofitRequest request = RetrofitRequest.getInstance(); request.getMyApi().getRecordDetail1("5R2XMCR9TR") .flatMap(new Func1<ResponseData<CheckDetailsData>, Observable<ResponseData<TyreData>>>() { @Override public Observable<ResponseData<TyreData>> call(ResponseData<CheckDetailsData> checkDetailsDataResponseData) { return request.getMyApi().getRecordDetail2(checkDetailsDataResponseData.getData().getSerialNumber()); } }) .flatMap(new Func1<ResponseData<TyreData>, Observable<ResponseData<List<RecordData>>>>() { @Override public Observable<ResponseData<List<RecordData>>> call(ResponseData<TyreData> tyreDataResponseData) { return request.getMyApi().getRecordList("2017-05-23", "s06600008ls"); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<ResponseData<List<RecordData>>>() { @Override public void onCompleted() { Log.i("yqy", "get请求完成"); } @Override public void onError(Throwable e) { mDialog.dismiss(); Log.i("yqy", "get请求错误" + e.getMessage()); //这里是在mainThread所以可以toast Toast.makeText(MainActivity.this, "请求失败:" + e.getMessage(), Toast.LENGTH_LONG).show(); } @Override public void onNext(ResponseData<List<RecordData>> response) { mDialog.dismiss(); List<RecordData> data = response.getData(); requstContent.setText("请求的数据总数是:" + data.size()); } });
简单的来看看这个代码,先是去获取到APi,然后getRecordDetail1()返回一个
Observable,接着再flatMap,这里调用接口2,将接口1 的可观察对象转出接口2的可观察对象,然后再flatMap这里请求接口3.将接口2的可观察对象转成接口3的可观察对象。然后设置请求数据的线程和最终相应数据的线程。.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())。最后subscribe从下往上依次执行。这里可以参考大头鬼译文哪里对这个讲的清楚一些。最后看一下代码,最明显的就是这个外层包裹的ResponseData,每一次都要写,应该是开始某处统一处理为好。下次修改。
以上,不对的地方请指出非常感谢。
阅读全文
0 0
- Rx系列学习笔记_RxJava+Retrofit进行简单请求
- Rx系列学习笔记_Rxjava的基本了解
- rx+retrofit 学习笔记
- Rx系列学习笔记_使用okhttp拦截器统一处理返回请求
- Rx系列学习
- Rx学习笔记
- Retrofit学习(一)集成-简单get请求
- Retrofit进行网络请求
- Rx学习笔记和总结
- Rx学习笔记和总结
- Retrofit 学习笔记和简单封装
- 使用Retrofit进行网络请求
- Retrofit 网络请求学习
- retrofit简单的网络请求
- retrofit简单的get请求
- retrofit的简单笔记
- RX学习笔记之map变换
- Rx、kotlin、retrofit三者结合封装的网络请求库
- Java进阶--static完全解析
- java获取指定资源文件路径的几种方法
- MyEclipse&Maven项目管理教程:创建Java Maven依赖项目
- 2017-06-05
- POI与JXL的实战性能对比
- Rx系列学习笔记_RxJava+Retrofit进行简单请求
- GridView嵌套在ViewPager中,ViewPager嵌套在ScrollView中,GridView显示不全问题
- linux -用户组
- CI框架模型中常见的数据库操作
- vuejs入门--环境搭建(windows)
- 了解Serverless架构
- linux命令的续行,linux shell 参数换行(标准说法:续行)
- MyEclipse&Maven项目管理教程:Maven依赖关系管理
- I have a blog today