管灌系统巡查员智能手机App
zuoxiao
2023-12-29 a3d26981fb0ff2049a55d08c447c73e114a45384
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package com.dayu.pipirrapp.net.subscribers;
 
import android.content.Context;
 
 
import com.dayu.pipirrapp.net.progress.ProgressCancelListener;
import com.dayu.pipirrapp.net.progress.ProgressDialogHandler;
 
import io.reactivex.rxjava3.disposables.Disposable;
 
 
/**
 * Created by qwy on 16/3/10.
 * 用于在Http请求开始时,自动显示一个ProgressDialog
 * 在Http请求结束是,关闭ProgressDialog
 * 调用者自己对请求数据进行处理
 */
public class ProgressSubscriber<T> extends BaseProgressSubscriber<T> implements ProgressCancelListener {
 
    private SubscriberListener mSubscriberListener;
    private ProgressDialogHandler mProgressDialogHandler;
    private boolean hideLoading = false;// 是否隐藏加载框,默认展示
    Disposable disposable;
    private Context context;
 
    public ProgressSubscriber() {
    }
 
    public ProgressSubscriber(Context context, SubscriberListener<T> mSubscriberListener) {
        this.mSubscriberListener = mSubscriberListener;
        this.context = context;
        try {
            mProgressDialogHandler = new ProgressDialogHandler(context, this, true);
        } catch (Exception e) {
        }
    }
 
    public ProgressSubscriber(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
        this(context, mSubscriberListener);
        this.hideLoading = hideLoading;
    }
 
    @Override
    public ProgressSubscriber iniData(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
        return new ProgressSubscriber(context, hideLoading, mSubscriberListener);
    }
 
    private void showProgressDialog() {
        if (mProgressDialogHandler != null && !hideLoading) {
            mProgressDialogHandler.obtainMessage(ProgressDialogHandler.SHOW_PROGRESS_DIALOG).sendToTarget();
        }
    }
 
    public void dismissProgressDialog() {
        try {
            if (mProgressDialogHandler != null) {
                mProgressDialogHandler.obtainMessage(ProgressDialogHandler.DISMISS_PROGRESS_DIALOG).sendToTarget();
                mProgressDialogHandler = null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 订阅开始时调用
     * 显示ProgressDialog
     */
    @Override
    public void onMyStart(Disposable d) {
        if (mSubscriberListener != null) {
            mSubscriberListener.onStart();
        }
        disposable=d;
        showProgressDialog();
    }
 
 
    @Override
    public void onCloose() {
        mSubscriberListener.onCloose();
    }
 
    /**
     * 完成,隐藏ProgressDialog
     */
    @Override
    public void onMyCompleted() {
        if (mSubscriberListener != null) {
            mSubscriberListener.onCompleted();
        }
        dismissProgressDialog();
    }
 
    /**
     * 对错误进行统一处理
     * 隐藏ProgressDialog
     *
     * @param e
     */
    @Override
    public void onMyError(Throwable e) {
        if (mSubscriberListener != null) {
            mSubscriberListener.onError(e);
        }
        dismissProgressDialog();
 
    }
 
    /**
     * 将onNext方法中的返回结果交给Activity或Fragment自己处理
     *
     * @param t 创建Subscriber时的泛型类型
     */
    @Override
    public void onMyNext(T t) {
        if (mSubscriberListener != null) {
            mSubscriberListener.onNext(t);
        }
    }
 
    /**
     * 取消ProgressDialog的时候,取消对observable的订阅,同时也取消了http请求
     */
    @Override
    public void onCancelProgress() {
        if (!disposable.isDisposed()) {
            disposable.dispose();
        }
    }
}