Runt
2022-05-29 e407dd1f335aa9c716b89b3152bf363b898d28fa
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package com.auto.lyric.retrofit.observable;
 
import android.util.Log;
 
import com.auto.lyric.data.BaseApiResult;
 
import java.io.EOFException;
import java.lang.reflect.ParameterizedType;
import java.net.SocketTimeoutException;
 
import io.reactivex.observers.DisposableObserver;
 
/**
 * 网络请求观察
 * Created by Administrator on 2021/11/11 0011.
 */
public abstract class HttpObserver<T extends BaseApiResult> extends DisposableObserver<T>{
 
    final String TAG = "HttpObserver";
 
    protected T value;
 
    @Override
    public void onNext(T value) {
        this.value = value;
    }
 
    /**
     * 错误处理
     * @param throwable
     */
    @Override
    public void onError(Throwable throwable) {
        Log.e("subscribe","onError "+throwable);
        T t = null;
        try {
            Log.e(TAG,this.getClass().getSimpleName()+" "+throwable.getMessage());
            Class<T> entityClass = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
            t = entityClass.newInstance();//实例化一个泛型
            t.result = "410";
            if( throwable instanceof SocketTimeoutException){
                t.reason = "服务请求超时,请稍候再试";//设置错误信息
            }else if(throwable instanceof EOFException){
                t.reason = "服务未反馈任何内容";//设置错误信息
            }else{
                t.reason = "网络连接不畅,请检查您的网络设置";//设置错误信息
            }
        } catch (ClassCastException e) {
            e.printStackTrace();
            t = (T) new BaseApiResult();
            t.result = "409";
            t.reason = "实例化对象未指定泛型实体类";
        } catch (Exception e) {
            e.printStackTrace();
            t.result = "409";
            t.reason = e.getMessage();
        }
        onError(t);
    }
 
    @Override
    public void onComplete() {
        if(value.result.equals("success")){
            //返回成功
            onComplete(value);
        }else{
            //返回失败
            onError(value);
        }
        Log.i("subscribe","onComplete");
    }
 
    /**
     * 接口返回成功
     * @param result
     */
    public abstract void onError(T result) ;
 
    /**
     * 接口返回失败
     * @param error
     */
    public abstract void onComplete(T error) ;
}