android+3.0+java8_Android Retrofit2.0+RxJava3.0 基本使用
一,ReactiveX
要学习RxJava,那么不得不提他的由来ReactiveX,ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发;
二,Rx的发展
Rx这几年非常流行,以至于开发出多种语言版本,例如RxJava 、 RxGo 、RxJS、RxKotlin、RxPY、Rx.NET等等;Rx的大部分语言库由ReactiveX这个组织负责维护,社区网站是 reactivex.io。
三,RxJava
RxJava是响应式编程(Reactive Extensions)的java实现,它基于观察者模式的实现了异步编程接口。
Rxjava 3.x 的github官网;
Rxjava 3.0的一些改变:官方Wiki;
Rxjava 3.x 文档可以在官方javadoc中找到
1,Retrofit + RxJava3组合使用
首先要引入依赖
implementation
"io.reactivex.rxjava3:rxjava:3.0.0"
implementation 'io.reactivex:rxandroid:
1.
2.
1'
implementation 'com.squareup.retrofit
2:retrofit:
2.
7.
0'
implementation 'com.squareup.retrofit
2:adapter-rxjava
3:
2.
9.
0'
相关配置module下的build.gradle
android
{
compileOptions
{
sourceCompatibility
JavaVersion.VERSION_1_8
targetCompatibility
JavaVersion.VERSION_1_8
}
}
注意Retrofit和RxJava组合使用时,Retrofit中使用的rxjava适配器(adapter-rxjava3)要和RxJava版本(io.reactivex.rxjava3:rxjava:3.0.0)一致;如本例都是使用的时3.0;关于先前Rerotfit没有Rxjava3.0适配器问题;
创建Retrofit时如果要使用rxjava适配,注意不要写错,正确姿势如下代码:
Retrofit retrofit =
new Retrofit.Builder()
.addCallAdapterFactory(RxJava3CallAdapterFactory.createSynchronous())
// Or
// .addCallAdapterFactory(RxJava3CallAdapterFactory.createWithScheduler(Schedulers.io()))
.baseUrl(
"")
.build();
2,Retrofit + RxJava组合使用
如果要使用1.0可以这样添加依赖
implementation 'io.reactivex:rxjava:
1.
0.
14
implementation 'io.reactivex:rxandroid:
1.
0.
1'
implementation 'com.squareup.retrofit
2:retrofit:
2.
0.
2'
implementation 'com.squareup.retrofit
2:adapter-rxjava:
2.
0.
2'
Retrofit创建的正确姿势:
Retrofit retrofit =
new Retrofit.Builder()
.baseUrl(
"http://www.baidu.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
3,Retrofit + RxJava2.0组合使用
关于RxJava2.0的使用要从一个异常说起:
异常:
Could not locate call adapter for io.reactivex.Observable.
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' RxJava适配器是1.0
所以换成RxJava2.0就可以了,原因Android项目中使用的是RxJava2.0,那么Retrofit要配合Rxjava使用,相应的要配置Rxjava2.0适配器;以此类推如果要使用Rxjava3.0那么相应的Retrofit中的
两种方式配置Retrofit中使用的RxJava2.0适配器
1,第三方的提供的RxJava2.0适配器
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
2,从Retrofit 2.2.0版开始,RxJava2有一个官方提供的适配器:
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(new OkHttpClient.Builder().build())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();
return retrofit.create(serviceClass);
四,Retrofit+Rxjava2具体使用案例
Retrofit+Rxjava2实现图片批量下载的功能
文章来源: blog.csdn.net,作者:Ang_qq_252390816,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/ezconn/article/details/109224878
android+3.0+java8_Android Retrofit2.0+RxJava3.0 基本使用相关推荐
- android retrofit2.0 rxjava2,Android - 网络请求之 Retrofit2 + RxJava
老婆保佑,代码无BUG 目录 引用 与其他开源请求库对比 Retrofit注解 使用 GET请求 POST请求 Retrofit2 + RxJava 基础使用 优化 封装Retrofit2 + RxJ ...
- android6.0麦克风权限,android 6.0权限检测以及6.0以下,麦克风、相机权限判断
android 6.0以上权限 android 6.0以上权限,我是通过PermissionsDispatcher进行申请,操作的,具体使用方法,见PermissionsDispatcher,Andr ...
- cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0
cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0 到了2.X版本中,cocos2d-x for Android已经不再支持(或者说放弃支持)opengl es 1 ...
- Android动态权限管理模型(4.3-6.0)
Google从4.3开始就试图引入AppOpsManager动态权限管理模型,但是,由于感觉技术不太成熟,在Release版本中,这个功能都是被隐藏掉的,所以官方Rom一直没有动态权限管理机制.直到A ...
- Android Studio:64K问题com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
问题 AS安装报错: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536at com.andr ...
- android 4.0 电话录音,ANDROID音频系统散记之四:4.0音频系统HAL初探
昨天(2011-11-15)发布了Android4.0的源码,今天download下来,开始挺进4.0时代.简单看了一下,发现音频系统方面与2.3的有较多地方不同,下面逐一描述. 一.代码模块位置 1 ...
- 【android】java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused
调试中通过android simulator模拟器链接localhost或者127.0.0.1,因为我在电脑上面建立了apache,我的代码大概就是 URL url = new URL(urlStri ...
- Android 在popupWindow上用autoCompleteTextView报错(Android 6.0报错,8.0没有问题)
在popupWindow上用autocompleteTextView报错, android.view.WindowManager$BadTokenException: Unable to add ...
- ANDROID模拟器访问本地WEB应用10.0.2.2
在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服务,但是如果我们在Android模拟器中也采用同样的地址来访问,Android模拟器将无法正 ...
最新文章
- python版本与编码的区别
- 矩阵元素求积及其矩阵元素的差分
- pandas基础(part4)--排序/分组/合并
- php实现金币提现,PHP实现微信提现功能
- 《大数据》2021年第5期目次摘要
- [Learn AF3]第七章 App framework组件之Popup
- 全球Top10最佳移动统计分析sdk
- YII 1.0 隐藏单入口index.php 设置路由与伪静态
- PHP验证时有用的几段代码
- HDFS_数据加密空间
- redis存储新闻列表_聊聊Redis使用场景
- 不知何时开学,接下来计划(罗勇军的浅谈程序设计竞赛的算法知识)
- 山外K66连接TLL注意事项
- 从墨刀上下载下来的原型html如何直接作为demo展示
- 魔方复原(BFS+剪枝)
- 红皮书——红色启示录
- 蝴蝶键盘 Linux,Macbook蝴蝶键盘与普通键盘有什么不一样? 蝶式结构键盘解析
- 【Java】动态代理原理分析
- MATLAB中nargin函数的用法nargin是用来判断输入变量个数的函数,这样就可以针对不同的情况执行不同的功能。通常可以用它来设定一些默认值。如下例所示: 函数文件 examp.m
- php rabbitmq 持久化 磁盘 setflags,PHP使用RabbitMQ
热门文章
- 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
- Infortrend EonStor GS赢得 “年度最佳混合式存储”大奖
- Tomcat虚拟主机配置
- 2015级C++第10、11周程序阅读 继承和派生
- 避免误删文件:Linux回收站机制
- 集群系统与事务处理需要注意的一点
- android webview 设置文字颜色,android webView 修改页面字体颜色
- android studio常用适配器,从ListView(Android Studio)的自定义适配器中的U...
- 网上书店黑盒测试_网上书店系统测试计划书.doc
- 合并报表调整、抵销分录的编制顺序