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();
|
}
|
}
|
}
|