|
|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
package com.example.musicplayer.base.observer;
|
|
|
|
|
|
|
|
|
|
// 导入所需的包和类
|
|
|
|
|
import android.net.ParseException;
|
|
|
|
|
import android.os.Handler;
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
@ -19,57 +20,69 @@ import retrofit2.HttpException;
|
|
|
|
|
import static com.example.musicplayer.app.Constant.TAG_ERROR;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* <pre>
|
|
|
|
|
* author : 残渊
|
|
|
|
|
* time : 2019/07/16
|
|
|
|
|
* desc : 对RxJava的下游即数据进行处理
|
|
|
|
|
* </pre>
|
|
|
|
|
* 对RxJava的下游即数据进行处理的基类。
|
|
|
|
|
* <p>
|
|
|
|
|
* author : 残渊
|
|
|
|
|
* time : 2019/07/16
|
|
|
|
|
* desc : 处理网络请求的响应,包括成功、失败和各种异常情况。
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
public class BaseObserver<T> extends ResourceObserver<T> {
|
|
|
|
|
private static final String TAG = "BaseObserver";
|
|
|
|
|
private boolean isShowLoadingView = true;
|
|
|
|
|
private boolean isShowErrorView =true;
|
|
|
|
|
private static final String TAG = "BaseObserver"; // 日志标签
|
|
|
|
|
private boolean isShowLoadingView = true; // 是否显示加载视图
|
|
|
|
|
private boolean isShowErrorView = true; // 是否显示错误视图
|
|
|
|
|
|
|
|
|
|
private BaseView baseView;
|
|
|
|
|
private BaseView baseView; // 基础视图接口,用于更新UI
|
|
|
|
|
|
|
|
|
|
private BaseObserver(){}
|
|
|
|
|
// 私有构造函数,防止直接实例化
|
|
|
|
|
private BaseObserver() {}
|
|
|
|
|
|
|
|
|
|
protected BaseObserver(BaseView baseView){
|
|
|
|
|
this(baseView,false,false);
|
|
|
|
|
// 构造函数,初始化BaseView
|
|
|
|
|
protected BaseObserver(BaseView baseView) {
|
|
|
|
|
this(baseView, false, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected BaseObserver(BaseView baseView,boolean isShowLoadingView){
|
|
|
|
|
this(baseView,isShowLoadingView,false);
|
|
|
|
|
// 构造函数,初始化BaseView和是否显示加载视图
|
|
|
|
|
protected BaseObserver(BaseView baseView, boolean isShowLoadingView) {
|
|
|
|
|
this(baseView, isShowLoadingView, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected BaseObserver(BaseView baseView,boolean isShowLoadingView, boolean isShowErrorView){
|
|
|
|
|
// 构造函数,初始化BaseView、是否显示加载视图和是否显示错误视图
|
|
|
|
|
protected BaseObserver(BaseView baseView, boolean isShowLoadingView, boolean isShowErrorView) {
|
|
|
|
|
this.baseView = baseView;
|
|
|
|
|
this.isShowLoadingView = isShowLoadingView;
|
|
|
|
|
this.isShowErrorView = isShowErrorView;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 请求开始时调用,显示加载视图。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
protected void onStart() {
|
|
|
|
|
if(isShowLoadingView) baseView.showLoading();
|
|
|
|
|
if (isShowLoadingView) baseView.showLoading();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 请求成功时调用,隐藏加载视图,显示正常视图。
|
|
|
|
|
* @param t 返回的数据
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onNext(T t) {
|
|
|
|
|
new Handler().postDelayed(()->{
|
|
|
|
|
new Handler().postDelayed(() -> {
|
|
|
|
|
baseView.showNormalView();
|
|
|
|
|
},500);
|
|
|
|
|
|
|
|
|
|
}, 500);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 请求失败时调用,处理各种异常情况并显示错误视图。
|
|
|
|
|
* @param e 异常信息
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onError(Throwable e) {
|
|
|
|
|
new Handler().postDelayed(()->{
|
|
|
|
|
if(isShowErrorView) baseView.showErrorView();
|
|
|
|
|
},500);
|
|
|
|
|
new Handler().postDelayed(() -> {
|
|
|
|
|
if (isShowErrorView) baseView.showErrorView();
|
|
|
|
|
}, 500);
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
// 处理不同类型的异常
|
|
|
|
|
if (e instanceof UnknownHostException) {
|
|
|
|
|
Log.e(TAG_ERROR, "networkError:" + e.getMessage());
|
|
|
|
|
networkError();
|
|
|
|
|
@ -82,50 +95,51 @@ public class BaseObserver<T> extends ResourceObserver<T> {
|
|
|
|
|
} else if (e instanceof JsonParseException || e instanceof JSONException || e instanceof ParseException) {
|
|
|
|
|
Log.e(TAG_ERROR, "解析错误:" + e.getMessage());
|
|
|
|
|
parseError();
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
Log.e(TAG_ERROR, "未知错误:" + e.getMessage());
|
|
|
|
|
unknown();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 请求完成时调用,不做任何操作。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onComplete() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 未知错误
|
|
|
|
|
* 显示未知错误信息。
|
|
|
|
|
*/
|
|
|
|
|
protected void unknown() {
|
|
|
|
|
baseView.showToast(App.getContext().getString(R.string.error_unknown));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 解析错误
|
|
|
|
|
* 显示解析错误信息。
|
|
|
|
|
*/
|
|
|
|
|
protected void parseError() {
|
|
|
|
|
baseView.showToast(App.getContext().getString(R.string.error_parse));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* http错误
|
|
|
|
|
* 显示HTTP错误信息。
|
|
|
|
|
*/
|
|
|
|
|
protected void httpError() {
|
|
|
|
|
baseView.showToast(App.getContext().getString(R.string.error_http));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 网络超时异常
|
|
|
|
|
* 显示网络超时错误信息。
|
|
|
|
|
*/
|
|
|
|
|
protected void timeoutError() {
|
|
|
|
|
baseView.showToast(App.getContext().getString(R.string.error_timeout));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 网络不可用异常
|
|
|
|
|
* 显示网络不可用错误信息。
|
|
|
|
|
*/
|
|
|
|
|
protected void networkError() {
|
|
|
|
|
baseView.showToast(App.getContext().getString(R.string.error_network));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|