Android RxJava操作符的学习---创建操作符--(无条件)网络请求轮询
1. 需求场景
2. 功能说明
本文将采用Get
方法对 金山词霸API 按规定时间 重复发送网络请求,从而模拟 轮询 需求实现
采用
Gson
进行数据解析
3. 具体实现
下面结合 Retrofit
与RxJava
实现轮询需求
3.1 步骤说明
- 添加依赖
- 创建 接收服务器返回数据 的类
- 创建 用于描述网络请求 的接口(区别于传统
Retrofit
形式) - 创建
Retrofit
实例 - 创建 网络请求接口实例 并 配置网络请求参数(区别于传统
Retrofit
形式) - 发送网络请求(区别于传统
Retrofit
形式) - 发送网络请求
- 对返回的数据进行处理
3.2 步骤实现
步骤1: 添加依赖
a. 在 Gradle
加入Retrofit
库的依赖
build.gradle
dependencies {// Android 支持 Rxjava
// 此处一定要注意使用RxJava2的版本
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'// Android 支持 Retrofit
compile 'com.squareup.retrofit2:retrofit:2.1.0'// 衔接 Retrofit & RxJava
// 此处一定要注意使用RxJava2的版本
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'// 支持Gson解析
compile 'com.squareup.retrofit2:converter-gson:2.1.0'}
b. 添加 网络权限
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
步骤2:创建 接收服务器返回数据 的类
- 金山词霸
API
的数据格式说明如下:
// URL模板
http://fy.iciba.com/ajax.php// URL实例
http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world// 参数说明:
// a:固定值 fy
// f:原文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// t:译文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto
// w:查询内容
- 示例
- 根据 金山词霸API 的数据格式,创建 接收服务器返回数据 的类:
Translation.java
public class Translation {private int status;private content content;private static class content {private String from;private String to;private String vendor;private String out;private int errNo;}//定义 输出返回数据 的方法public void show() {Log.d("RxJava", content.out );}
}
步骤3:创建 用于描述网络请求 的接口
采用 注解 + Observable<...>
接口描述 网络请求参数
GetRequest_Interface.java
public interface GetRequest_Interface {@GET("ajax.php?a=fy&f=auto&t=auto&w=hi%20world")Observable<Translation> getCall();// 注解里传入 网络请求 的部分URL地址// Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里// 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL可以忽略// 采用Observable<...>接口 // getCall()是接受网络请求数据的方法
}
接下来的步骤均在RxJavafixRxjava.java内实现(请看注释)
RxJavafixRxjava.java
public class RxJavafixRxjava extends AppCompatActivity {private static final String TAG = "Rxjava";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/** 步骤1:采用interval()延迟发送* 注:此处主要展示无限次轮询,若要实现有限次轮询,仅需将interval()改成intervalRange()即可**/Observable.interval(2,1, TimeUnit.SECONDS)// 参数说明:// 参数1 = 第1次延迟时间;// 参数2 = 间隔时间数字;// 参数3 = 时间单位;// 该例子发送的事件特点:延迟2s后发送事件,每隔1秒产生1个数字(从0开始递增1,无限个)/** 步骤2:每次发送数字前发送1次网络请求(doOnNext()在执行Next事件前调用)* 即每隔1秒产生1个数字前,就发送1次网络请求,从而实现轮询需求**/.doOnNext(new Consumer<Long>() {@Overridepublic void accept(Long integer) throws Exception {Log.d(TAG, "第 " + integer + " 次轮询" );/** 步骤3:通过Retrofit发送网络请求**/// a. 创建Retrofit对象Retrofit retrofit = new Retrofit.Builder().baseUrl("http://fy.iciba.com/") // 设置 网络请求 Url.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖).addCallAdapterFactory(RxJava2CallAdapterFactory.create()) // 支持RxJava.build();// b. 创建 网络请求接口 的实例GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);// c. 采用Observable<...>形式 对 网络请求 进行封装Observable<Translation> observable = request.getCall();// d. 通过线程切换发送网络请求observable.subscribeOn(Schedulers.io()) // 切换到IO线程进行网络请求.observeOn(AndroidSchedulers.mainThread()) // 切换回到主线程 处理请求结果.subscribe(new Observer<Translation>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(Translation result) {// e.接收服务器返回的数据result.show() ;}@Overridepublic void onError(Throwable e) {Log.d(TAG, "请求失败");}@Overridepublic void onComplete() {}});}}).subscribe(new Observer<Long>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(Long value) {}@Overridepublic void onError(Throwable e) {Log.d(TAG, "对Error事件作出响应");}@Overridepublic void onComplete() {Log.d(TAG, "对Complete事件作出响应");}});}
}
3.3 测试结果
Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
注意:依赖compile改为 implementation
Android RxJava操作符的学习---创建操作符--(无条件)网络请求轮询相关推荐
- Android RxJava应用:优雅实现网络请求轮询(无条件)
前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. 今天,我将为大家带来 Rxjava创建操作符的常见开发应用场景:轮询需求 ...
- java 轮询请求_使用RxJava来实现网络请求轮询功能
原标题:使用RxJava来实现网络请求轮询功能 近日有媒体报道称,腾讯重金入股永辉超市旗下生鲜超市超级物种,目前交易已经完成.受此刺激,永辉超市股价迅速涨停,午后临时停牌.若此举成行,超级物种将更有底 ...
- java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询
前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. Github截图 RxJava如此受欢迎的原因,在于其提供了丰富 & ...
- Android RxJava操作符的学习---创建操作符
RxJava如此受欢迎的原因,在于其提供了丰富 & 功能强大的操作符,几乎能完成所有的功能需求 1. 简介 RxJava 操作符的具体简介如下: 2. 类型 RxJava功能强大,所以其对应的 ...
- Android RxJava操作符的学习---功能性操作符--(有条件)网络请求轮询(结合Retrofit)
1. 需求场景 2. 功能说明 采用Get方法对 金山词霸API 按规定时间重复发送网络请求,从而模拟 轮询 需求实现 停止轮询的条件 = 当轮询到第4次时 采用 Gson 进行数据解析 3. 具体实 ...
- Android RxJava操作符的学习---变换操作符---网络请求嵌套回调
变换操作符的主要开发需求场景 = 嵌套回调(Callback hell) 下面,我将采用一个实际应用场景实例来讲解嵌套回调(Callback hell) 1. 需求场景 1.1 背景 需要进行嵌套网络 ...
- Android 微博实时热点获取(GET)网络请求
Android 微博实时热点获取(GET)网络请求 首先在xml文件上界面布局 这边采用LinearLayour布局,首先添加TextView控件来显示标题,第二采用RecyclerView列表控件来 ...
- Android RxJava操作符的学习---功能性操作符
3.4 功能性操作符 作用 辅助被观察者(Observable) 在发送事件时实现一些功能性需求 实际应用场景 连接(订阅) 观察者 & 被观察者 线程调度(切换) 错误处理 事件生命周期操作 ...
- Android RxJava操作符的学习---功能性操作符--网络请求出错重连(结合Retrofit)
1. 需求场景 2. 功能说明 功能需求说明 功能逻辑 实例说明 在本例子中:采用Get方法对 金山词霸API 发送网络请求 通过 断开网络连接 模拟 网络异常错误(恢复网络即可成功发送请求) 限制 ...
最新文章
- linux触摸屏两指缩放_自定义TextView实现单指拖动,双指缩放旋转
- python基础练习(一)
- 此情应是长相守 你若无心我便休
- linux教程期末考试,Linux-期末考试试题8套含答案.doc
- linux multipath.log,Linux Multipath配置
- BGP——OSPF与BGP协议联动(出现问题+解决方案配置)
- python数据可视化是什么_python3数据可视化是什么?
- [导入]构建WCF面向服务的应用程序系列课程(10):安全基础.zip(24.27 MB)
- js中最简单base64图片流实现自动下载
- mysql读写分离延迟问题_MySQL读写分离后的延迟解决方案
- ppt如何替换其他mo ban_有没有一个 PPT 技巧让自己觉得人生都亮了?
- 听湖畔大学:史玉柱谈企业文化
- Kubesphere应用商店
- 华为网络技术学习打卡8(云计算大数据,openstack,docker)
- 字节跳动算法工程师总结:腾讯+字节+阿里面经真题汇总,含面试题+答案
- Nvidia Agx Xavier平台无PD控制器USB接口调试
- 明码(C语言)——罡罡同学
- MySQL启动失败,试图访问许可验证文件时出错,请重新安装SQL Server来更正次文件
- Mina框架并实现Server与Client端的简单消息传递!
- Rust 五分钟了解,三十分种入门