Android RxJava 实战讲解:优雅实现 网络请求轮询
2017-11-07 10:08
567 查看
转自-----http://blog.csdn.net/carson_ho/article/details/78256466
& 使用简单的特点,深受各大
如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava
入门教程
& 功能强大的操作符,几乎能完成所有的功能需求
今天,我将为大家带来
本系列文章主要基于
接下来的时间,我将持续推出
注:关于
RxJava:最基础的操作符详解 - 创建操作符
本文将采用
采用
下面我将结合
添加依赖
创建 接收服务器返回数据 的类
创建 用于描述网络请求 的接口(区别于传统
创建
创建 网络请求接口实例 并 配置网络请求参数(区别于传统
发送网络请求(区别于传统
发送网络请求
对返回的数据进行处理
本实例侧重于说明
Retrofit 2.0 使用教程(含实例讲解)
a. 在
build.gradle
b. 添加 网络权限
AndroidManifest.xml
步骤2:创建 接收服务器返回数据 的类
金山词霸
示例
根据 金山词霸API 的数据格式,创建 接收服务器返回数据 的类:
Translation.java
步骤3:创建 用于描述网络请求 的接口
采用 注解 +
GetRequest_Interface.java
接下来的步骤均在RxJavafixRxjava.java内实现(请看注释)
RxJavafixRxjava.java
Carson_Ho的Github地址 = RxJava2实战系列:轮询
本文主要讲解了
,并结合
接下来的时间,我将持续推出
前言
Rxjava,由于其基于事件流的链式调用、逻辑简洁
& 使用简单的特点,深受各大
Android开发者的欢迎。
如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava
入门教程
RxJava如此受欢迎的原因,在于其提供了丰富
& 功能强大的操作符,几乎能完成所有的功能需求
今天,我将为大家带来
Rxjava创建操作符的常见开发应用场景:轮询需求 ,并结合
Retrofit与
RxJava实现,希望大家会喜欢。
本系列文章主要基于
Rxjava 2.0
接下来的时间,我将持续推出
Android中
Rxjava 2.0的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!
目录
1. 需求场景
注:关于
Rxjava中的延时创建操作符
interval()和
intervalRange()的使用请看文章Android
RxJava:最基础的操作符详解 - 创建操作符
2. 功能说明
本文将采用Get方法对 金山词霸API 按规定时间 重复发送网络请求,从而模拟 轮询 需求实现
采用
Gson进行数据解析
3. 具体实现
下面我将结合 Retrofit与
RxJava实现轮询需求
3.1 步骤说明
添加依赖创建 接收服务器返回数据 的类
创建 用于描述网络请求 的接口(区别于传统
Retrofit形式)
创建
Retrofit实例
创建 网络请求接口实例 并 配置网络请求参数(区别于传统
Retrofit形式)
发送网络请求(区别于传统
Retrofit形式)
发送网络请求
对返回的数据进行处理
本实例侧重于说明
RxJava的轮询需求,关于
Retrofit的使用请看文章:这是一份很详细的
Retrofit 2.0 使用教程(含实例讲解)
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"; @Override protected 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>() { @Override public 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>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Translation result) { // e.接收服务器返回的数据 result.show() ; } @Override public void onError(Throwable e) { Log.d(TAG, "请求失败"); } @Override public void onComplete() { } }); } }).subscribe(new Observer<Long>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Long value) { } @Override public void onError(Throwable e) { Log.d(TAG, "对Error事件作出响应"); } @Override public void onComplete() { Log.d(TAG, "对Complete事件作出响应"); } }); } }
3.3 测试结果
4. Demo地址
Carson_Ho的Github地址 = RxJava2实战系列:轮询
5. 总结
本文主要讲解了 Rxjava创建操作符的实际开发需求场景:轮询需求
,并结合
Retrofit与
RxJava实现
接下来的时间,我将持续推出
Android中
Rxjava 2.0的一系列文章,包括原理、操作符、应用场景、背压等等 ,有兴趣可以继续关注Carson_Ho的安卓开发笔记!!
相关文章推荐
- Android RxJava 实战讲解:优雅实现 网络请求轮询
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Android RxJava 实战系列:优雅实现 网络请求嵌套回调
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Android:RxJava 结合 Retrofit 优雅实现 网络请求轮询
- Android RxJava 实战系列:优雅实现 网络请求嵌套回调
- Android:RxJava 结合 Retrofit 全面实现 网络请求出错重连
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- 使用RxJava来实现网络请求轮询功能
- 使用MVP+Retrofit+RxJava实现的的Android Demo (下)使用Retrofit+RxJava处理网络请求
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Android 框架设计Demo,一个简单的MVP示例搜索功能,网络请求用Retrofit+RxJava实现
- Retrofit + Rxjava + RxAndroid实现网络请求
- Android:RxJava 结合 Retrofit 全面实现 网络请求出错重连
- Android实战简易教程<三十八>(模仿腾讯QQ的网络状态提示和设置功能实现)
- Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的
- Android各大网络请求库的比较及实战
- Android实战简易教程<四十九>(两种方式实现网络图片异步加载)