我们使用了Rx编程思维后,从起点到终点这条线一直是连着的,没有断掉,中间需要加需求(加水印、日志记录等)我们可以进行卡片式拦截,把上游的拦截成我们需要的新的,再将新的游下去,直到终点显示UI 。这种思维也叫链式思维 。
配合
其实是一个管理者,控制请求网络,请求是通过,请求的结果丢给处理,拿到结果后通过起点流向下去,显示UI 。
现在有一个需求:通过配合来获取 里面的项目总数据和Item数据 。
同样我们先用流程图来理清思路:
现在用代码实现:
创建客户端API
public interface WanAndroidApi {// 总数据@GET("project/tree/json")Observable getProject();// 异步线程 耗时操作// ITem数据@GET("project/list/{pageIndex}/json") // ?cid=294Observable getProjectItem(@Path("pageIndex") int pageIndex, @Query("cid") int cid);// 异步线程 耗时操作}
封装网络请求框架
public class HttpUtil {private static final String TAG = "HttpUtils";private static final String BASE_URL = "https://www.wanandroid.com/";/*** 根据各种配置创建出retrofit** @return返回创建好的retrofit*/public static Retrofit getOnlineCookieRetrofit() {// OKHttp客户端OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();// 各种参数配置OkHttpClient okHttpClient = httpBuilder.addNetworkInterceptor(new StethoInterceptor()).readTimeout(10000, TimeUnit.SECONDS).connectTimeout(10000, TimeUnit.SECONDS).writeTimeout(10000, TimeUnit.SECONDS).build();return new Retrofit.Builder().baseUrl(BASE_URL)//TODO 请求用OKHttp.client(okHttpClient)//TODO 响应用RxJava//添加一个json解析的工具.addConverterFactory(GsonConverterFactory.create(new Gson()))//添加RxJava处理工具.addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();}}
将服务器返回的JSON数据转换为
方式一:通过在线转化
方式二:使用 里面的插件进行转化
用来实现我们的数据流向
/*** TODO Retrofit+RxJava 查询 项目分类(总数据查询)* @param view*/@SuppressLint("CheckResult")public void getProjectAction(View view) {//获取网络APIapi.getProject().subscribeOn(Schedulers.io()) //上面异步.observeOn(AndroidSchedulers.mainThread()) //下面 主线程.subscribe(new Observer() {@Overridepublic void onSubscribe(Disposable d) {progressDialog = new ProgressDialog(UseActivity.this);progressDialog.setTitle("资源获取中....");progressDialog.show();}@Overridepublic void onNext(ProjectBean projectBean) {Log.d(TAG, "onNext: " + projectBean);textView.setText(projectBean.toString());}@Overridepublic void onError(Throwable e) {Log.d(TAG, "onError: " + e);}@Overridepublic void onComplete() {if (progressDialog != null) {progressDialog.dismiss();}}});}/*** TODO Retrofit+RxJava 查询 项目列表数据(Item数据查询)* @param view*/@SuppressLint("CheckResult")public void getProjectListAction(View view) {api.getProjectItem(3, 294).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer() {@Overridepublic void accept(ProjectItemBean projectItemBean) throws Exception {Log.d(TAG, "accept: " + projectItemBean);}});}
- 2behavior原理解析
- 基于mysql的胖客户端_[转]关于胖客户端和瘦客户端的理解
- 如何理解孺子可教也的意思 孺子可教也的意思是啥啊
- canvas.drawText理解和FontMetrics文字测量
- ubuntu下安装HHVM
- 在大佬的援助下浅谈个人理解 Ginger 的难题I 补题
- 子网掩码、网关简介
- 运算放大电路入门——虚断与虚断
- 一文理解深度学习中的BN,LN,IN,GN,SN的归一化操作
- JavaScript深入理解之原型与原型链