Rxjava2不能再发射Null了】的更多相关文章

RxJava2的最大改变就是不能再流里发射Null了,有人会问发射了就怎么了,答案是你的流会因为NPE断开. 例如下面这段代码因为文件被删了找不到返回null,这时候就不触发下面Consumer的accept. Disposable subscribe = Observable.fromCallable(new Callable<Bitmap>() { @Override public Bitmap call() { FileInputStream fis; Bitmap b=null; tr…
如何从RxJava升级到RxJava2. RxJava2已经推出有一年半的时间,由于之前RxJava已经在现有项目中广泛使用,而RxJava2在除了很多命名外并没有太多革新,所以相信有很多人跟我一样都还没有升级. 随着老版本渐渐的失去维护,更重要的是有一定时间允许我来做这个迁移,其实弃老从新一直都是程序员的喜好. 虽然官方提供了文档详尽的介绍了区别,但是文章之长,可能很多人读不下去,却有想快速的迁移过来,我将除了命名改变之外有用的地方总结成了几点,供大家参考. 不能再发射Null了 RxJava…
java程序运行时的内存空间,按照虚拟机规范有下面几项: )程序计数器 指示下条命令执行地址.当然是线程私有,不然线程怎么能并行的起来. 不重要,占内存很小,忽略不计. )方法区 这个名字很让我迷惑.这里面装的其实是程序运行需要的类文件,常量,静态变量等.作用容易明白. 程序运行时,执行代码先得装入内存,当然java好像是在第一次用到时才加载,这样可以避免装入无用的类,节省内存. 在HosSpot上,方法区现今和永久代是同一个区域.我就这么理解了,虽然作者解释说其实这两者根本不是同一个概念. 概…
前言 很多项目使用流行的Rxjava2 + Retrofit搭建网络框架,Rxjava现在已经发展到Rxjava2,之前一直都只是再用Rxjava,但从来没有了解下Rxjava的内部实现,接下来一步步来分析Rxjava2的源码,Rxjava2分Observable和Flowable两种(无被压和有被压),我们今天先从简单的无背压的observable来分析.源码基于rxjava:2.1.1. 一.Rxjava如何创建事件源.发射事件.何时发射事件.如何将观察者和被观察者关联起来 简单的例子 先来…
RxJava2 方法总结 看了许多讲解RxJava的文章,有些文章讲解的内容是基于第一个版本的,有些文章的讲解是通过比较常用的一些API和基础的概念进行讲解的. 但是每次看到RxJava的类中的几十个方法的时候,总是感觉心里没底.所以,我打算自己去专门写篇文章来从API的角度系统地梳理一下RxJava的各种方法和用法. 1.RxJava 基本 1.1 RxJava 简介 RxJava是一个在Java VM上使用可观测的序列来组成异步的.基于事件的程序的库. 虽然,在Android中,我们可以使用…
RxJava2实战---第七章 合并操作符和连接操作符 RxJava的合并操作符: startWith():在数据序列的开头增加一项数据. merge:将多个Observable合并为一个. mergeDelayError():合并多个Observable,让没有错误的Observable都完成后再发射错误通知. zip():使用一个函数组合多个Observable发射的数据集合,然后再发射这个结果. combineLatest():当两个Observable中的任何一个发射一个数据时,通知一个…
上一篇文章Android进阶:四.RxJava2 源码解析 1里我们讲到Rxjava2 从创建一个事件到事件被观察的过程原理,这篇文章我们讲Rxjava2中链式调用的原理.本文不讲用法,仍然需要读者熟悉Rxjava基本的用法. 一.Rxjava2 的基本用法 Rxjava是解决异步问题的,它的链式调用让代码看起来非常流畅优雅.现在我们带上线程切换以及链式调用来看看.下面代码是示例: Observable .create(new ObservableOnSubscribe<String>() {…
本文适合使用过Rxjava2或者了解Rxjava2的基本用法的同学阅读 一.Rxjava是什么 Rxjava在GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的.基于事件的程序的库). 通俗来说,Rxjava是一个采用了观察者模式设计处理…
引言 Retrofit 是一个用于 Android 和 Java 平台的类型安全的,底层使用OkHttp实现网络请求框架.Retrofit 通过将 API 抽象成 Java 接口而让我们连接到 REST web 服务变得很轻松. RxJava 提供一套异步编程的 API,这套 API 是基于观察者模式的,而且是链式调用的. Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式. 主要讲解如何使用各…
近几年,Retrofit犹如燎原之火搬席卷了整个Android界.要是不懂Retrofit,简直不好意思出门... 由于近几个项目都没用到Retrofit,无奈只能业余时间自己撸一下,写的不好的地方,还请不吝赐教. 要集成retrofit,在app的build.gradle中添加库以来就可以: compile 'com.squareup.retrofit2:retrofit:2.3.0' 如果需要集成json解析,还需要添加库: compile 'com.squareup.retrofit2:c…
概述 承接上一篇RxJava2 源码解析(一),本系列我们的目的: 知道源头(Observable)是如何将数据发送出去的.    知道终点(Observer)是如何接收到数据的.    何时将源头和终点关联起来的    知道线程调度是怎么实现的    知道操作符是怎么实现的 本篇计划讲解一下4,5. RxJava最强大的莫过于它的线程调度 和 花式操作符.map操作符 map是一个高频的操作符,我们首先拿他开刀.例子如下,源头Observable发送的是String类型的数字,利用map转换成…
概述 最近事情太多了,现在公司内部的变动,自己岗位的变化,以及最近决定找工作.所以博客耽误了,准备面试中,打算看一看RxJava2的源码,遂有了这篇文章. 不会对RxJava2的源码逐字逐句的阅读,只寻找关键处,我们平时接触得到的那些代码.背压实际中接触较少,故只分析了Observable.分析的源码版本为:2.0.1 我们的目的: 知道源头(Observable)是如何将数据发送出去的.    知道终点(Observer)是如何接收到数据的.    何时将源头和终点关联起来的    知道线程调…
摘记: 1.map -- 转换  有些服务端的接口设计,会在返回的数据外层包裹一些额外信息,这些信息对于调试很有用,但本地显示是用不到的.使用 map() 可以把外层的格式剥掉,只留下本地会用到的核心格式.代码大致形式: api.getData() .map(response -> response.data) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(observer)…
近几年,Retrofit犹如燎原之火搬席卷了整个Android界.要是不懂Retrofit,简直不好意思出门...由于近几个项目都没用到Retrofit,无奈只能业余时间自己撸一下,写的不好的地方,还请不吝赐教.要集成retrofit,在app的build.gradle中添加库以来就可以compile 'com.squareup.retrofit2:retrofit:2.3.0' 如果需要集成json解析,还需要添加库: compile 'com.squareup.retrofit2:conve…
1.package更改 rx1包名由原来的rx.xxx更改为io.reactivex.xxx,并且在同一个module之下,rx1和rx2是不兼容的. 2.背压支持 RxJava在1.0只有一个个观察者模式,只能部分支持背压: Observable(被观察者)/Observer(观察者) Observable(被观察者)/Subscriber(观察者) RxJava在2.0出现了两个观察者模式,新增Flowable支持背压,而Observable不支持背压: Observable(被观察者)/O…
代码地址如下:http://www.demodashi.com/demo/13473.html 简介 基于RxJava2+Retrofit2实现简单易用的网络请求,结合android平台特性的网络封装库,采用api链式调用一点到底,集成cookie管理,多种缓存模式,极简https配置,上传下载进度显示,请求错误自动重试,请求携带token.时间戳.签名sign动态配置,自动登录成功后请求重发功能,3种层次的参数设置默认全局局部,默认标准ApiResult同时可以支持自定义的数据结构,已经能满足…
代码地址如下:http://www.demodashi.com/demo/12132.html XSnow 基于RxJava2+Retrofit2精心打造的Android基础框架,包含网络.上传.下载.缓存.事件总线.权限管理.数据库.图片加载.UI模块,基本都是项目中必用功能,每个模块充分解耦,可自由拓展. XSnow,X:未知一切,取其通用之意:Snow:雪,取其纯净之意.该框架通用纯净,只依赖公共核心库. 项目依赖:compile 'com.vise.xiaoyaoyou: xsnow:2…
转载请标明出处: http://blog.csdn.net/zxt0601/article/details/61614799 本文出自:[张旭童的博客](http://blog.csdn.net/zxt0601) 概述 近期事情太多了,如今公司内部的变动,自己岗位的变化,以及近期决定找工作. 所以博客耽误了.准备面试中,打算看一看RxJava2的源代码.遂有了这篇文章. 不会对RxJava2的源代码逐字逐句的阅读,仅仅寻找关键处,我们平时接触得到的那些代码. 背压实际中接触较少.故仅仅分析了Ob…
rxjava+retrofit处理网络请求 在使用rxjava+retrofit处理网络请求的时候,一般会采用对观察者进行封装,实现代码复用和拓展.可以参考我的这篇文章:rxjava2+retrofit封装处理网络请求全解析.一种可行的封装如下: 基类observer public abstract class BaseObserver<T> implements Observer<T> { protected String errMsg = ""; prote…
RxJava2和Retrofit2用的越来越多,最近也在封装一个通用的网络请求库,其中就包括了单文件下载的方法,所以这里进行记录.文末附带Demo 由于网上很多的方法都是使用拦截器进行进度的监听,个人觉得使用起来非常复杂和,所以取了个巧,在文件写入到硬盘的时候对文件读写进行监听,就解决了retrofit2下载文件没有进度监听的问题. 先上封装之后的使用代码,使用简单,直接回调下载之后的文件 封装步骤 1.定义接口(使用的时候传入完整的url,@Streaming注解可用于下载大文件) @Stre…
我这里的网络请求是用的装饰者模式去写的,什么是装饰者模式呢?在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.我的理解就是一个接口,两个实现类,一个实现类负责调用接口的方法,另一个类负责功能的具体实现.本文中所提到的代码都是伪代码,最后会给出完整的,最初版本的项目框架.不包含任何业务逻辑   项目结构.png   容我一个一个来说,首先,我们一般请求网络的时候,会有统一的返回数据格式,一个是需要判断返回code码的,就比方说登录…
Github 相关代码: Github地址 一直感觉 RxJava2 的取消订阅有点混乱, 这样也能取消, 那样也能取消, 没能系统起来的感觉就像掉进了盘丝洞, 迷乱… 下面说说这几种情况 几种取消的情况 subscribe 时返回了 disposable:  subscribe 不返回 disposable, 从 observer 的 onSubscribe 中获取:  之前从网上看的, 使用继承 DisposableObserver 的 observer, 这个 observer 可以直接…
原文地址:http://blog.csdn.net/maplejaw_/article/details/52442065 Observable 在RxJava1.x中,最熟悉的莫过于Observable这个类了,笔者刚使用RxJava2.x时,创建一个Observable后,顿时是懵逼的.因为我们熟悉的Subscriber居然没影了,取而代之的是ObservableEmitter,俗称发射器.此外,由于没有了Subscriber的踪影,我们创建观察者时需使用Observer.而Observer也…
简书地址 http://www.jianshu.com/p/2badfbb3a33b 描述 RxJava 1.X RxJava 2.X package包名 rx.xxx io.reactivex.xxx Reactive Streams规范 1.X早于Reactive Streams规范出现,仅部分支持规范 完全支持 Backpressure 背压 对背压的支持不完善 Observable设计为不支持背压新增Flowable支持背压 null空值 支持 不再支持null值,传入null值会抛出 …
RxJava2实战---第五章 变换操作符和过滤操作符 RxJava的变换操作符主要包括以下几种: map():对序列的每一项都用一个函数来变换Observable发射的数据序列. flatMap().concatMap()和flatMapIterable():将Obsrvable发射的数据集合变换为Observables集合,让后将这些Observable发射的数据平坦化地放进一个单独的Observable中. switchMap():将Observable发射的数据集合变换为Observab…
Rxjava2实战--第三章 创建操作符 Rxjava的创建操作符 操作符 用途 just() 将一个或多个对象转换成发射这个或者这些对象的一个Observable from() 将一个Iterable.一个Future或者一个数组转换成一个Observable create() 使用一个函数从头创建一个Obervable defer() 只有当订阅者订阅才创建Observable,为每个订阅者创建一个新的Observab range() 创建一个发射指定范围的整数序列的Observable i…
第二章 RxJava基础知识 1. Observable 1.1 RxJava的使用三步骤 创建Observable 创建Observer 使用subscribe()进行订阅 Observable.just("Hello World") .subscribe(new Consumer<String>() { @Override public void accept(String s) throws Exception { System.out.println(s); } }…
目录 前言 RX介绍 Rx模式 Rx使用依赖: Rxjava的入门基础 1. Observable 2. Flowable 3. Single 4. Completable 5. Maybe 6. Subject 7. Scheduler 小结: 前言 现在我们可以看到越来越多的开发者都在使用 Rx 相关的技术进行 App,Java 后端等领域进行开发.在开源的社区以及互联网公司,Rx.响应式编程.函数式都是热门的存在.所以笔者将结合自身的学习以及实际使用情况,写一个针对 Rxjava2 的系列…
前言 文本已经收录到我的Github个人博客,欢迎大佬们光临寒舍:我的GIthub博客 看完本篇文章的,可以看下带你封装自己的MVP+Retrofit+RxJava2框架(二),里面封装得到了改进 本篇文章需要已经具备的知识: MVP的概念和基本使用 Retrofit框架的基本使用 RxJava2框架的基本使用 ButterKnife框架的基本使用 Base基类的概念 学习清单: Activity和Fragment基类的封装 MVP的封装使用 一.为什么要封装这套框架呢? 在搞清楚这个问题之前,…
title: RxJava2源码解析(二) categories: 源码解析 tags: 源码解析 rxJava2 前言 本篇主要解析RxJava的线程切换的原理实现 subscribeOn 首先, 我们先看下subscribeOn()方法, 老样子, 先上Demo Observable<Integer> observable = Observable .create(new ObservableOnSubscribe<Integer>() { @Override public v…