From 58a4a54c62c65cab92c85fd3edeff832e4572ead Mon Sep 17 00:00:00 2001 From: nilupeng <qingingrunt2010@qq.com> Date: Tue, 09 Aug 2022 10:59:47 +0000 Subject: [PATCH] gson 转换日期问题 接入登录接口 修改图标和启动页 --- app/src/main/java/com/runt/open/mvvm/retrofit/observable/HttpObserver.java | 106 ++++++++++++++++++++++++++++++----------------------- 1 files changed, 60 insertions(+), 46 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..c9e3760 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 @@ -1,69 +1,83 @@ package com.runt.open.mvvm.retrofit.observable; import android.util.Log; +import com.google.gson.Gson; +import com.runt.open.mvvm.base.activities.BaseActivity; +import com.runt.open.mvvm.data.HttpApiResult; +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; +import retrofit2.adapter.rxjava2.HttpException; -import androidx.lifecycle.MutableLiveData; - - -import com.runt.open.mvvm.data.BaseApiResult; - -import java.lang.reflect.ParameterizedType; +import java.net.ConnectException; import java.net.SocketTimeoutException; - -import io.reactivex.observers.DisposableObserver; +import java.net.UnknownHostException; +import java.util.concurrent.TimeoutException; +import java.util.regex.Pattern; /** * 网络请求观察 * 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>> { + + BaseActivity activity; + + public HttpObserver() { + } + + public HttpObserver(BaseActivity activity) { + this.activity = activity; + } 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) { + 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 error){ + Log.i(TAG,"onFailed "+activity); + if(activity != null){ + activity.showToast(error.msg); + } + } + } -- Gitblit v1.9.1