Rxjava的onError方法定位空指针

Rxjava的onError方法定位空指针

  最近一直在使用kotlin+Rxjava写项目。碰到一个空指针(那个null是后来定位到了打印出来的)。情况如下:

override fun onError(e: Throwable) {
        Log.e(TAG, "onError:" + e)
    }

  空指针?小意思。仔细一看:没有定位?
  没有定位!!!
  没有定位!!!
  没有定位!!!
  就问你绝不绝望?我onNext方法中的操作有40行左右。上哪去找这个空指针?
  也许你会说:你不会写个全局捕获异常吗?我个人觉得try-catch里面写那么多代码狠low。
  研究了一个多小时,找到解决方案:

override fun onError(e: Throwable) {
        Log.e(TAG, "onError:" + e)
        e?.stackTrace?.forEach {
            Log.e(TAG, "stackTrace---element:" +it?.toString())
        }
    }

结束语

  在百度解决方案的时候,真的觉得蛮无奈的。根本没有类似的案例,都是关于错误处理操作符的文章,可能是大神们觉得没必要写出来吧。百度不到,我就只能去看官方的文档了。其实看文档解决问题的速度更快。
  stackTrace是不能直接打印的,直接打印打出来的是内存值。需要遍历。

参考资料:

Rxjava文档

public class ResponseTransformer<T> implements ObservableTransformer<IResponse<T>, T> { private CompositeDisposable compositeDisposable; public ResponseTransformer(@NonNull CompositeDisposable compositeDisposable) { this.compositeDisposable = compositeDisposable;} public ResponseTransformer() {} @Override public ObservableSource<T> apply(Observable<IResponse<T>> upstream) { return upstream.doOnSubscribe(new Consumer<Disposable>() { @Override public void accept(Disposable disposable) throws Exception { if (compositeDisposable != null) { compositeDisposable.add(disposable); } } }).onErrorResumeNext(throwable -> { ApiException ex = ApiException.handleException(throwable); Log.e("NetworkError", ex.getMessage(), ex); return Observable.error(ex); }) .flatMap(response -> handleResponse(response)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } private ObservableSource<T> handleResponse(IResponse<T> response) { if (!response.isSuccess()) { return Observable.error(new ApiException(response.getCode(), "API Error:"+response.getMessage())); } if (response.getData() != null) { return Observable.just(response.getData()); } try { Class<?> clz = ReflectUtils.analysisClassInfo(response); return Observable.just((T) clz.getDeclaredConstructor().newInstance()); } catch (Exception e) { return Observable.error(new ApiException("-1", "Reflection instantiation failed"+e.getMessage())); } } public static <U> ResponseTransformer<U> obtain(CompositeDisposable compositeDisposable) { return new ResponseTransformer<>(compositeDisposable); }android java中优化代码
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值