Runt
2025-06-24 5ca8b01844798011e887e02b6934d6f125b56db1
完善网络请求
1 files added
2 files modified
121 ■■■■ changed files
libmvi/src/main/java/com/runt/open/mvi/base/model/BaseViewModel.kt 30 ●●●● patch | view | raw | blame | history
libmvi/src/main/java/com/runt/open/mvi/retrofit/observable/HttpErrorObserver.java 61 ●●●●● patch | view | raw | blame | history
libmvi/src/main/java/com/runt/open/mvi/retrofit/observable/HttpObserver.java 30 ●●●● 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 = "",
        touchOutside:Boolean = true,//空白和系统返回 是否关闭
        showClose:Boolean = false,//显示关闭图标(默认不显示)
        confirmDissmiss:Boolean = true,//点击确定是否关闭
        cancelDissmiss:Boolean = true,//点击取消是否关闭
        onDismissRequest : () -> Unit = {},
        onConfirmRequest : () -> Unit = {}, ){
    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 = {} ,
    ){
        _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);
}