开发的时候碰见一种情况,使用Rxjava+Retrofit请求一个接口,返回成功有两种情况,一种是正常返回实体类,http响应码为200,这个时候可以正常解析,另一种是响应码为200,响应体什么都没有,为null。这个时候再去解析的时候就会报如下的错误。Rxjava 当响应体为null 的时候会直接回调 onError 方法
java.lang.NullPointerException: Null is not a valid element
解决方法
- 首先修改Retrofit的返回值类型
@GET("locus/device/record/in/{deviceId}")
fun inRecord(@Path("deviceId") deviceId: String): Observable<Response<RecordBean>>
如果之前的返回值为 Observable<RecordBean>
,就修改为 Observable<Response<RecordBean>>
,Response能够收一个null值。
- 为Retrofit 添加一个Converter 处理空值,如果没有响应体就返回null
class NullOnEmptyConverterFactory : Converter.Factory