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);
}
}
}
Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.
1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino
我一直梦想, 看到你们相册那样的地方。真棒。
我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。
我热爱这样的想法, 去那么多国家。真的很鼓舞。
能感受到热爱。继续保持 感受。
我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。
1
1
1