处理 RX 中的 response.body == null

Posted

技术标签:

【中文标题】处理 RX 中的 response.body == null【英文标题】:Handle response.body == null in RX 【发布时间】:2021-12-25 19:49:09 【问题描述】:

我在下面的android中使用Rx

        repository.getUserList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe( response ->

                val userList = response.body()!!
                view.showUser(userList)
                
            ,  throwable ->
                handlerException(view, throwable)
            ).addToDisposable()

有效。

但有时response.body() 为空,可能是网络错误或服务器没有响应, 那么应用就会崩溃。

所以我必须像这样添加try catch

        repository.getUserList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe( response ->

                try 
                    val userList = response.body()!!
                    view.showUser(userList)
                 catch (e: Exception) 
                    handleException(view, e)
                
            ,  throwable ->
                handleException(view, throwable)
            ).addToDisposable()

但我认为应该有更好的方法来处理 rx 中的错误。 谁能帮帮我,谢谢。

【问题讨论】:

【参考方案1】:

你可以使用过滤运算符

.filter  it != null 

这是 RX 方式,但您可以像这样使用 kotlin 空安全:

.subscribe( response ->

            response.body()?.let
            view.showUser(userList)
              
        

希望对你有所帮助??

【讨论】:

谢谢。但我认为它和try catch 一样。

以上是关于处理 RX 中的 response.body == null的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud gateway获取response body

如何从 Objective-C 中调用的 JavaScript 函数访问 response.body?

Postman-----将 A 请求中 response Body 中的参数值传入到下一个请求 B 的 request body 中作为参数发送请求

json.decode(response.body)......“这里的response.body不起作用......” [重复]

tableView.rx.itemSelected 中的 RxSwift 双映射

为啥 response.body 不能用 xlsx 格式读取