版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/parade0393/article/details/88738635
前言
更新RxJava2之后,就不能在onNext里面发送null值了。但是项目中有些接口,例如更新用户密码的接口(我就遇到了),后台没有返回数据(也就是null),于是修改密码成功,但是活动crash(没有走onNext方法,而是走onError方法,但是异常对象也是null,提示Null is not a valid element),在网上找到了一片文章当Retrofit2+RxJava2遇到为null的返回结果,但是原谅我没看懂,哭(┬_┬)
正题
下面说一下我的解决方法
利用map操作符,把被观察者(null)转换成不为null的任意对象再传递给观察者
问题没有解决之前是这样写的
public static void updateUserPassword(String oldPwd,String newPwd,Observer<Object> observer){
ApiSubscribe(RetrofitCreateHelper.getDocServiceApi().updateUserPassword(oldPwd,newPwd),observer);
利用map操作符后是这样写的
/**
* 修改密码,由于请求返回null,而RxJava2的onNext()方法不允许传入null,所以这里利用map操作符转换被观察者(事件)类型
* @param oldPwd
* @param newPwd
* @param observer
*/
public static void updateUserPassword(String oldPwd,String newPwd,Observer<String> observer){
ApiSubscribe(RetrofitCreateHelper.getDocServiceApi().updateUserPassword(oldPwd,newPwd).map(new Function<Object, String>() {
@Override
public String apply(Object optional) throws Exception {
return optional == null? "1":"2";
}
}),observer);
}