当Retrofit2+RxJava2遇到为null的返回结果

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
    }

猜你喜欢

转载自blog.csdn.net/parade0393/article/details/88738635