Rxjava+Retrofit的强大以及优点我就我多说了,本篇文章主要是解决一下在使用过程中遇到的一个常见的bug,数据转换异常
场景:在请求后台数据的时候,经常会有,因为异常情况,导致后台Success,然后返回一个错误码和错误信息,
而返回的主体数据结构就可能会是千奇百怪了,经常和预设的结构不符合,这时,就会出现数据结构异常的报错。
处理起来很麻烦,无法将其中的真正的错误原因展现给用户。本章主要解决这类问题
我先将报错给大家发一下
03-29 16:36:14.624 8589 8589 W System.err: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 83 path $.result.data
03-29 16:36:14.625 8589 8589 W System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224)
03-29 16:36:14.625 8589 8589 W System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
03-29 16:36:14.625 8589 8589 W System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
03-29 16:36:14.615 8804 8804 W netd : type=1400 audit(0.0:37704): avc: denied { search } for name="com.zte.heartyservice" dev="mmcblk0p30" ino=1095623 scontext=u:r:netd:s0 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=dir permissive=0
03-29 16:36:14.625 8589 8589 W System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
03-29 16:36:14.626 8589 8589 W System.err: at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
03-29 16:36:14.626 8589 8589 W System.err: at com.google.gson.Gson.fromJson(Gson.java:887)
03-29 16:36:14.627 8589 8589 W System.err: at com.google.gson.Gson.fromJson(Gson.java:852)
03-29 16:36:14.628 8589 8589 W System.err: at com.google.gson.Gson.fromJson(Gson.java:801)
03-29 16:36:14.628 8589 8589 W System.err: at com.weinong.business.api.func.CustomResponseBodyConverter.convert(CustomResponseBodyConverter.java:38)
03-29 16:36:14.628 8589 8589 W System.err: at com.weinong.business.api.func.CustomResponseBodyConverter.convert(CustomResponseBodyConverter.java:21)
03-29 16:36:14.628 8589 8589 W System.err: at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:119)
03-29 16:36:14.628 8589 8589 W System.err: at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:218)
03-29 16:36:14.628 8589 8589 W System.err: at retrofit2.OkHttpCall.execute(OkHttpCall.java:180)
03-29 16:36:14.628 8589 8589 W System.err: at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:41)
03-29 16:36:14.628 8589 8589 W System.err: at io.reactivex.Observable.subscribe(Observable.java:10903)
03-29 16:36:14.628 8589 8589 W System.err: at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
03-29 16:36:14.629 8589 8589 W System.err: at io.reactivex.Observable.subscribe(Observable.java:10903)
03-29 16:36:14.629 8589 8589 W System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)
03-29 16:36:14.629 8589 8589 W System.err: at io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)
03-29 16:36:14.629 8589 8589 W System.err: at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:64)
03-29 16:36:14.629 8589 8589 W System.err: at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)
03-29 16:36:14.629 8589 8589 W System.err: at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)
03-29 16:36:14.629 8589 8589 W System.err: at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)
03-29 16:36:14.630 858