最近因为服务端重构代码,采用redius标准返回,code是在responce中返回,data中不在包含业务code和message,只有纯纯的数据。这就导致了有些请求不需要返回数据,只需要判断code为200就是成功了。这时候如果是在kotlin下,使用Retrofit+RxJava2网络框架就会出错。
会出现java.lang.NullPointerException: Null is not a valid element的bug
或者
出现java.io.EOFException: End of input at line 1 column 1 path $错误
百度了各种解决办法,有些根本是错误的,不满足我的业务需求。
最后终于找到一个有用的办法。
1.改用Call<ResponseBody>作为返回值。但是请求方法也要改变了。
@POST("/demo")
fun postNotData(): Call<Void>
2.可以将返回Observable<ResponseBody>改为Observable<Response<Void>> 作为返回值(推荐)
@POST("/demo")
fun postNotData(): Observable<Response<Void>>
3.可以将返回Observable<T>,设置T允许为空,就是设置为Observable<T?>
···
@POST("/demo")
fun postNotData(): Observable<String?>
···
网友评论