libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt | ●●●●● patch | view | raw | blame | history | |
libmvi/src/main/java/com/runt/open/mvi/retrofit/observable/HttpErrorObserver.java | ●●●●● patch | view | raw | blame | history | |
libmvi/src/main/java/com/runt/open/mvi/retrofit/observable/HttpObserver.java | ●●●●● patch | view | raw | blame | history |
libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt
@@ -5,9 +5,9 @@ import android.os.Build import android.provider.MediaStore import android.util.Log import androidx.activity.ComponentActivity import androidx.core.content.FileProvider import androidx.lifecycle.ViewModel import com.google.gson.Gson import com.runt.open.mvi.base.BaseActivity import com.runt.open.mvi.base.LayoutView import com.runt.open.mvi.data.LoadingState @@ -20,8 +20,11 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import okhttp3.Callback import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.Response import java.io.File import java.io.FileInputStream @@ -57,7 +60,7 @@ TAG = javaClass.simpleName; } fun getActivity(): ComponentActivity { fun getActivity(): BaseActivity<LayoutView<BaseViewModel> , BaseViewModel> { return mActivity!!; } @@ -69,13 +72,15 @@ _isLoading.value = _isLoading.value.copy(isVisible = false); } fun showDialog( title:String = "", message: String = "", confirmText:String = "确定", cancelText:String = "", fun showDialog( title : String = "" , message : String = "" , confirmText : String = "确定" , cancelText : String = "" , touchOutside:Boolean = true,//空白和系统返回 是否关闭 showClose:Boolean = false,//显示关闭图标(默认不显示) confirmDissmiss:Boolean = true,//点击确定是否关闭 cancelDissmiss:Boolean = true,//点击取消是否关闭 onDismissRequest : () -> Unit = {}, onConfirmRequest : () -> Unit = {}, ){ onConfirmRequest : () -> Unit = {} , ){ _messageState.value = MessageState(title = title, message = message, touchOutside = touchOutside, showClose = showClose, confirmText = confirmText, cancelText = cancelText, confirmDissmiss = confirmDissmiss, cancelDissmiss = cancelDissmiss, onDismissRequest = onDismissRequest, @@ -250,6 +255,13 @@ }.subscribe(observer) } fun createJsonBody(obj : Any) : RequestBody { val mediaType = "application/json; charset=utf-8".toMediaType() val json = if (obj is String) obj else Gson().toJson(obj) val requestBody = json.toString().toRequestBody(mediaType) return requestBody; } fun getFilePathFromUri(uri:Uri):String?{ var filePath = ""; var filePathColumn = arrayOf(MediaStore.Video.Media.DATA) libmvi/src/main/java/com/runt/open/mvi/retrofit/observable/HttpErrorObserver.java
New file @@ -0,0 +1,61 @@ package com.runt.open.mvi.retrofit.observable; import com.runt.open.mvi.base.model.BaseViewModel; import com.runt.open.mvi.data.HttpApiResult; import java.util.Date; import io.reactivex.Observable; /** * 请求超时处理 * @author Runt (qingingrunt2010@qq.com) * @purpose * @date 2023/3/21 */ public abstract class HttpErrorObserver<RESULT> extends HttpObserver<RESULT>{ protected long requestErrorTimes = new Date().getTime(); protected final long OVERTIME = 50000;//超时时长50s protected Observable observable;//接口请求服务 protected BaseViewModel viewModel; public HttpErrorObserver(Observable observable, BaseViewModel viewModel) { this.observable = observable; this.viewModel = viewModel; } public HttpErrorObserver(BaseViewModel viewModel) { this(null,viewModel); } public void setObservable(Observable observable) { this.observable = observable; } @Override public void onFailed(HttpApiResult<RESULT> httpResult) { if(httpResult.code >= 604 && httpResult.code < 608 && new Date().getTime() - requestErrorTimes < OVERTIME){ try { viewModel.httpObserverOn(observable,this); } catch (Exception e) { e.printStackTrace(); } }else if(httpResult.code >= 604 && httpResult.code < 608 ){ onTimeOut(); }else{ onEndFailed(httpResult); } } /** * 请求错误 */ public abstract void onEndFailed(HttpApiResult<RESULT> httpResult); /** * 请求超时 */ public abstract void onTimeOut(); } libmvi/src/main/java/com/runt/open/mvi/retrofit/observable/HttpObserver.java
@@ -3,7 +3,6 @@ import android.util.Log; import com.google.gson.Gson; import com.runt.open.mvi.base.BaseActivity; import com.runt.open.mvi.data.HttpApiResult; import java.net.ConnectException; @@ -22,27 +21,24 @@ */ public abstract class HttpObserver<RESULT> implements Observer<HttpApiResult<RESULT>> { BaseActivity activity; public HttpObserver() { } public HttpObserver(BaseActivity activity) { this.activity = activity; } final String TAG = "HttpObserver"; protected int observerStatus;//0 订阅 1 响应 2 请求错误 3 结束 @Override public void onSubscribe(Disposable d) { observerStatus = 0 ; Log.d(TAG,"onSubscribe "+hashCode()); } @Override public void onNext(HttpApiResult<RESULT> httpResult) { observerStatus = 1; Log.d(TAG,"onNext "+httpResult); if (httpResult != null && httpResult.code == 0) { onSuccess(httpResult.data); handleResult(httpResult.data); }else{ onFailed(httpResult);//接口返回错误 } @@ -50,6 +46,7 @@ @Override public void onError(Throwable e) { observerStatus = 2; Log.e(TAG,"onError "+e.getMessage()+" "+hashCode()); int code = 600; String msg = "网络请求失败,请检查网络或稍后重试"; @@ -70,16 +67,19 @@ @Override public void onComplete() { observerStatus = 3; Log.i(TAG,"onComplete "+hashCode()); } protected abstract void onSuccess(RESULT data); /** * 处理返回数据 * @param result */ public abstract void handleResult(RESULT result); protected void onFailed(HttpApiResult error){ Log.i(TAG,"onFailed "+activity); if(activity != null){ activity.showToast(error.msg); } } /** * 请求错误信息 */ public abstract void onFailed(HttpApiResult<RESULT> result); }