最近的项目升级,将rxjava版本由1.x升级到2.x。这期间遇到一个问题,就是map返回空值。
正常的网络请求,有时候可能要求,一个请求完之后,再发起另一个请求,两者的返回结果是一样的,但是如果其中一个请求为空,另一个不为空,不影响程序的正常运行。
我们先模拟个例子
Observable.just("1","2").map {
if (it == "1") null
else it
}.subscribe {
println(it)
}
运行结果
io.reactivex.exceptions.OnErrorNotImplementedException: The mapper function returned a null value.
rxjava的框架内部报错,影响正常的输出。
null过滤掉
那我们怎样将空值过滤掉呢?用filter函数。
Observable.just("1","2").map {
if (it == "1") null
else it
}.filter {
it != null
}.subscribe {
println(it)
}
运行结果,和上面的一样,说明,filter的条件没有走。
那进一步思考,如何在map返回null的时候