From d6f5361b391ea531e7c1f763384fbb21398a56bb Mon Sep 17 00:00:00 2001 From: nilupeng <qingingrunt2010@qq.com> Date: Tue, 09 Aug 2022 04:04:57 +0000 Subject: [PATCH] Merge branch 'master' into page --- app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java | 90 +++++++++++++++++++++++---------------------- 1 files changed, 46 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java b/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java index b02e526..a99f74e 100644 --- a/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java +++ b/app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java @@ -2,68 +2,70 @@ import android.util.Log; -import androidx.lifecycle.MutableLiveData; +import com.google.gson.Gson; +import com.runt.open.mvvm.data.HttpApiResult; - -import com.runt.open.mvvm.data.BaseApiResult; - -import java.lang.reflect.ParameterizedType; +import java.net.ConnectException; import java.net.SocketTimeoutException; +import java.net.UnknownHostException; +import java.util.concurrent.TimeoutException; +import java.util.regex.Pattern; -import io.reactivex.observers.DisposableObserver; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; +import retrofit2.adapter.rxjava2.HttpException; /** * 网络请求观察 * Created by Administrator on 2021/11/11 0011. */ -public abstract class HttpObserver<T extends BaseApiResult> extends DisposableObserver<T>{ +public abstract class HttpObserver<RESULT> implements Observer<HttpApiResult<RESULT>> { final String TAG = "HttpObserver"; - MutableLiveData<T> resultLive; - - public HttpObserver(MutableLiveData<T> resultLive) { - this.resultLive = resultLive; - } - - @Override - public void onNext(T value) { - resultLive.setValue(value); + public void onSubscribe(Disposable d) { + Log.d(TAG,"onSubscribe "+hashCode()); } @Override - public void onError(Throwable throwable) { - Log.i("subscribe","onError"); - - try { - Log.e(TAG,this.getClass().getSimpleName()+" "+throwable.getMessage()); - Class<T> entityClass = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; - T t = entityClass.newInstance();//实例化一个泛型 - t.code = 410; - if( throwable instanceof SocketTimeoutException){ - t.msg = "服务请求超时,请稍候再试";//设置错误信息 - }else{ - t.msg = "网络连接不畅,请检查您的网络设置";//设置错误信息 - } - resultLive.setValue(t); - } catch (ClassCastException e) { - e.printStackTrace(); - T t = (T) new BaseApiResult<String>(); - t.code = 409; - t.msg = "实例化对象未指定泛型实体类"; - resultLive.setValue(t); - } catch (Exception e) { - e.printStackTrace(); - T t = (T) new BaseApiResult<String>(); - t.code = 409; - t.msg = e.getMessage(); - resultLive.setValue(t); + public void onNext(HttpApiResult<RESULT> httpResult) { + Log.d(TAG,"onNext "+httpResult); + if (httpResult != null && httpResult.code == 0) { + onSuccess(httpResult.data); + }else{ + onFailed(httpResult);//接口返回错误 } } @Override - public void onComplete() { - Log.i("subscribe","onComplete"); + public void onError(Throwable e) { + e.printStackTrace(); + Log.e(TAG,"onError "+e.getMessage()+" "+hashCode()); + int code = 600; + String msg = "网络请求失败,请检查网络或稍后重试"; + if( e instanceof ConnectException || e instanceof TimeoutException + || e instanceof SocketTimeoutException || e instanceof UnknownHostException){ + code = 601; + msg = "网络请求失败,请检查网络或稍后重试"; + }else if( e instanceof HttpException){ + String regEx = "[^0-9]"; + Log.i(TAG,"code:"+ Pattern.compile(regEx).matcher(e.getMessage()).replaceAll("")); + String error = Pattern.compile(regEx).matcher(e.getMessage()).replaceAll(""); + code = error.length()>0?Integer.parseInt(error):500; + msg = error.length()>0?"服务器请求失败":"登录信息验证失败"; + } + HttpApiResult httpResult = new Gson().fromJson("{'code':"+code+",'msg':'"+msg+"'}", HttpApiResult.class); + onFailed(httpResult); } + + @Override + public void onComplete() { + Log.i(TAG,"onComplete "+hashCode()); + } + + protected abstract void onSuccess(RESULT data); + + protected void onFailed(HttpApiResult httpResult){} + } -- Gitblit v1.9.1