HttpObserver
请求请加载提示
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
if(isShowLoading){
activity.showLoading();
}
}
请求结束关闭提示
public void onEnd(){
if(isShowLoading){
activity.hideLoading();
}
}
我们需要在类中保存acitivity实例,还需要定义一个是否显示弹框的变量
private boolean isShowLoading;
private BaseLogicActivity activity;
BaseLogicActivity 是自定义的activity基类
创建实例的方法
/**
* 构造方法
* @param activity
*/
public HttpObserver(BaseLogicActivity activity) {
super();
this.activity = activity;
}
/**
* 构造方法
* @param activity
*/
public HttpObserver(BaseLogicActivity activity, boolean isShowLoading) {
super();
this.activity = activity;
this.isShowLoading = isShowLoading;
}
/**
fragment调用
*/
public HttpObserver(BaseLogicFragment fragment) {
super();
this.activity = (BaseLogicActivity) fragment.getActivity();
this.isShowLoading = true;
}
使用
在activity中
HttpObserver完整代码
/**
* 网络请求Observer
*/
public abstract class HttpObserver <T> extends ObserverAdapter<T> {
private static final String TAG = "HttpObserver";
private boolean isShowLoading;
private BaseLogicActivity activity;
/**
* 构造方法
* @param activity
*/
public HttpObserver(BaseLogicActivity activity) {
super();
this.activity = activity;
}
/**
* 构造方法
* @param activity
*/
public HttpObserver(BaseLogicActivity activity, boolean isShowLoading) {
super();
this.activity = activity;
this.isShowLoading = isShowLoading;
}
public HttpObserver(BaseLogicFragment fragment) {
super();
this.activity = (BaseLogicActivity) fragment.getActivity();
this.isShowLoading = true;
}
/**
* 请求成功
*
* @param data
*/
public abstract void onSucceeded(T data);
/**
* 请求失败
*
* @param data
* @param e
* @return true:自己处理;false:框架处理
*/
public boolean onFailed(T data, Throwable e) {
return false;
}
@Override
public void onError(Throwable e) {
super.onError(e);
onEnd();
//处理错误
handlerRequest(null, e);
}
@Override
public void onNext(T t) {
super.onNext(t);
onEnd();
Log.d(TAG, "onNext: "+t);
if (isSucceeded(t)) {
//请求正常
onSucceeded(t);
} else {
//请求出错了
handlerRequest(t, null);
}
}
/**
* 请求结束,成功失败都会调用(调用前调用),使用在这里隐藏加载提示
*/
public void onEnd(){
if(isShowLoading){
activity.hideLoading();
}
}
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
if(isShowLoading){
activity.showLoading();
}
}
/**
* 网络请求是否成功了
*
* @param t
* @return
*/
private boolean isSucceeded(T t) {
if (t instanceof Response) {
//retrofit里面的响应对象
//获取响应对象
Response response = (Response) t;
//获取响应码
int code = response.code();
//判断响应码
if (code >= 200 && code <= 299) {
//网络请求正常
return true;
}
} else if (t instanceof BaseResponse) {
//判断具体的业务请求是否成功
BaseResponse response = (BaseResponse) t;
return response.isSucceeded();
}
return false;
}
/**
* 处理错误网络请求
*
* @param data
* @param error
*/
private void handlerRequest(T data, Throwable error) {
if (onFailed(data, error)) {
//回调了请求失败方法
//并且该方法返回了true
//返回true就表示外部手动处理错误
//那我们框架内部就不用做任何事情了
} else {
// 框架处理错误,比如弹出提示等等
HandleExceptionUtil.handlerRequest(data, error);
}
}
}
1
1
1
1
1
1
1
1
1
1