package com.laotan.easyreader.http.utils; import com.blankj.utilcode.utils.NetworkUtils; import com.blankj.utilcode.utils.ToastUtils; import com.laotan.easyreader.app.AppConstants; import com.laotan.easyreader.http.Stateful; import com.laotan.easyreader.presenter.BaseView; import rx.Subscriber; /** * Created by quantan.liu on 2017/3/21. */ public class Callback<T> extends Subscriber<T> { private Stateful target; public void setTarget(Stateful target) { this.target = target; } public void detachView() { if (target != null) { target = null; } } @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); onfail(); } @Override public void onNext(T data) { //// TODO: 2017/3/22 这边网络请求成功返回都不一样所以不能在这里统一写了(如果是自己公司需要规定一套返回方案) /// TODO: 2017/3/22 这里先统一处理为成功 我们要是想检查返回结果的集合是否是空,只能去子类回掉中完成了。 target.setState(AppConstants.STATE_SUCCESS); onResponse(); onResponse(data); } public void onResponse(T data) { /** * 如果喜欢统一处理成功回掉也是可以的。 * 不过获取到的数据都是不规则的,理论上来说需要判断该数据是否为null或者list.size()是否为0 * 只有不成立的情况下,才能调用成功方法refreshView/()。如果统一处理就放在每个refreshView中处理。 */ ((BaseView) target).refreshView(data); } public void onResponse() { } public void onfail() { if (!NetworkUtils.isAvailableByPing()) { ToastUtils.showShortToast("你连接的网络有问题,请检查路由器"); if (target != null) { target.setState(AppConstants.STATE_ERROR); } return; } ToastUtils.showShortToast("程序员哥哥偷懒去了,快去举报他"); if (target != null) { target.setState(AppConstants.STATE_EMPTY); } } }