Runt
2025-08-05 546cf3cc5df3fd55e10672e474c246582b947689
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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();
}