/* * Copyright (c) 2018 denua. */ package cn.denua.v2ex.service; import com.tencent.bugly.crashreport.CrashReport; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; /* * 通用请求响应观察者,这里会预处理一些错误响应, 以及捕捉子类中处理响应结果时发生的错误。 * * @author denua */ public abstract class RxObserver<T> implements Observer<T> { private BaseService<?> mBaseService; public RxObserver(){} RxObserver(BaseService<?> baseService){ this.mBaseService = baseService; } @Override public void onSubscribe(Disposable d) { if (mBaseService!=null){ mBaseService.onStartRequest(); } } public void onNext(T t){ if ( mBaseService != null && mBaseService.isCanceled()) return; if (t == null){ _onError(ErrorEnum.ERR_EMPTY_RESPONSE.getReadable()); return; } if (t instanceof String){ if (((String) t).contains(ErrorEnum.ERR_PAGE_NEED_LOGIN.getPattern()) || ((String) t).contains(ErrorEnum.ERR_PAGE_NEED_LOGIN0.getPattern())){ _onError(ErrorEnum.ERR_PAGE_NEED_LOGIN.getReadable()); return; } } try { _onNext(t); }catch (V2exException e){ e.printStackTrace(); _onError(e.getMsg()); CrashReport.postCatchedException(e); }catch (NullPointerException e){ e.printStackTrace(); _onError(e.getMessage()); CrashReport.postCatchedException(e); } } /** * 在这里处理请求层次的错误,例如网络错误,服务器错误等 * * @param e 异常 */ @Override public void onError(Throwable e) { e.printStackTrace(); _onError(e.getMessage()); CrashReport.postCatchedException(e); } @Override public void onComplete() { } public abstract void _onNext(T t); /** * 在这里处理 处理响应时发生的异常 * * @param msg 返回给 view 的错误消息 */ public void _onError(String msg){ if (mBaseService != null){ mBaseService.returnFailed(msg); } } }