1. 需求场景

2. 功能说明

本文将采用Get方法对 金山词霸API 按规定时间 重复发送网络请求,从而模拟 轮询 需求实现

采用 Gson 进行数据解析

3. 具体实现

下面结合 RetrofitRxJava 实现轮询需求

3.1 步骤说明

  1. 添加依赖
  2. 创建 接收服务器返回数据 的类
  3. 创建 用于描述网络请求 的接口(区别于传统Retrofit形式)
  4. 创建 Retrofit 实例
  5. 创建 网络请求接口实例 并 配置网络请求参数(区别于传统Retrofit形式)
  6. 发送网络请求(区别于传统Retrofit形式)
  7. 发送网络请求
  8. 对返回的数据进行处理

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操作符的学习---创建操作符--(无条件)网络请求轮询相关推荐

  1. Android RxJava应用:优雅实现网络请求轮询(无条件)

    前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. 今天,我将为大家带来 Rxjava创建操作符的常见开发应用场景:轮询需求 ...

  2. java 轮询请求_使用RxJava来实现网络请求轮询功能

    原标题:使用RxJava来实现网络请求轮询功能 近日有媒体报道称,腾讯重金入股永辉超市旗下生鲜超市超级物种,目前交易已经完成.受此刺激,永辉超市股价迅速涨停,午后临时停牌.若此举成行,超级物种将更有底 ...

  3. java 轮询请求接口_Android RxJava 实际应用讲解:(无条件)网络请求轮询

    前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. Github截图 RxJava如此受欢迎的原因,在于其提供了丰富 & ...

  4. Android RxJava操作符的学习---创建操作符

    RxJava如此受欢迎的原因,在于其提供了丰富 & 功能强大的操作符,几乎能完成所有的功能需求 1. 简介 RxJava 操作符的具体简介如下: 2. 类型 RxJava功能强大,所以其对应的 ...

  5. Android RxJava操作符的学习---功能性操作符--(有条件)网络请求轮询(结合Retrofit)

    1. 需求场景 2. 功能说明 采用Get方法对 金山词霸API 按规定时间重复发送网络请求,从而模拟 轮询 需求实现 停止轮询的条件 = 当轮询到第4次时 采用 Gson 进行数据解析 3. 具体实 ...

  6. Android RxJava操作符的学习---变换操作符---网络请求嵌套回调

    变换操作符的主要开发需求场景 = 嵌套回调(Callback hell) 下面,我将采用一个实际应用场景实例来讲解嵌套回调(Callback hell) 1. 需求场景 1.1 背景 需要进行嵌套网络 ...

  7. Android 微博实时热点获取(GET)网络请求

    Android 微博实时热点获取(GET)网络请求 首先在xml文件上界面布局 这边采用LinearLayour布局,首先添加TextView控件来显示标题,第二采用RecyclerView列表控件来 ...

  8. Android RxJava操作符的学习---功能性操作符

    3.4 功能性操作符 作用 辅助被观察者(Observable) 在发送事件时实现一些功能性需求 实际应用场景 连接(订阅) 观察者 & 被观察者 线程调度(切换) 错误处理 事件生命周期操作 ...

  9. Android RxJava操作符的学习---功能性操作符--网络请求出错重连(结合Retrofit)

    1. 需求场景 2. 功能说明 功能需求说明 功能逻辑  实例说明 在本例子中:采用Get方法对 金山词霸API 发送网络请求 通过 断开网络连接 模拟 网络异常错误(恢复网络即可成功发送请求) 限制 ...

最新文章

  1. linux触摸屏两指缩放_自定义TextView实现单指拖动,双指缩放旋转
  2. python基础练习(一)
  3. 此情应是长相守 你若无心我便休
  4. linux教程期末考试,Linux-期末考试试题8套含答案.doc
  5. linux multipath.log,Linux Multipath配置
  6. BGP——OSPF与BGP协议联动(出现问题+解决方案配置)
  7. python数据可视化是什么_python3数据可视化是什么?
  8. [导入]构建WCF面向服务的应用程序系列课程(10):安全基础.zip(24.27 MB)
  9. js中最简单base64图片流实现自动下载
  10. mysql读写分离延迟问题_MySQL读写分离后的延迟解决方案
  11. ppt如何替换其他mo ban_有没有一个 PPT 技巧让自己觉得人生都亮了?
  12. 听湖畔大学:史玉柱谈企业文化
  13. Kubesphere应用商店
  14. 华为网络技术学习打卡8(云计算大数据,openstack,docker)
  15. 字节跳动算法工程师总结:腾讯+字节+阿里面经真题汇总,含面试题+答案
  16. Nvidia Agx Xavier平台无PD控制器USB接口调试
  17. 明码(C语言)——罡罡同学
  18. MySQL启动失败,试图访问许可验证文件时出错,请重新安装SQL Server来更正次文件
  19. Mina框架并实现Server与Client端的简单消息传递!
  20. Rust 五分钟了解,三十分种入门

热门文章

  1. nginx安装(编译gz安装rpm安装)
  2. CI CD(gitlab ci来实现)
  3. python里的赋值是什么意思_Python中赋值是什么意思
  4. pcb焊盘尺寸设计尺寸参考
  5. RBM(受限玻尔兹曼机)原理及代码
  6. 成功解决龙猫饲养的一大难题:乱撒尿
  7. 院士发声:科研人也要养家,非升即走只能做短平快的研究
  8. 怎一个牛逼了得?如果可以,我愿连用三个!
  9. 关于unique函数
  10. 番茄学习法及番茄钟软件 Pomodairo 1.9