[置顶] RxJava的Subscriber使用,封装加载进度条ProgressSubscriber
2017-02-17 11:38
381 查看
最近看了一篇文章刚开始学习RxJava,鉴于边学边用;发现当我在请求网络时老是需要手动显示与关闭LadingDialog,因此我在这里把LadingDialog封装到Subscriber中。
1.继承Subscriber
2.LoadingDialog的显示与消失
3.取消dialog监听
4.Subscriber事件监听
1.继承Subscriber
public class ProgressSubscriber<T> extends Subscriber<T> implements ProgressCancelListener { private SubscribeOnNextListener mOnNextListener; private Context mContext; private ProgressHandler mProgressHandler; private boolean mUnsubscribable = false;//dialog被cancel掉的时候,是否取消掉事件监听 public ProgressSubscriber(Context context, String text, SubscribeOnNextListener listener){ mOnNextListener = listener; mContext = context; mProgressHandler = new ProgressHandler(mContext, this, false, text); } public ProgressSubscriber(Context context, boolean cancelable, String text, SubscribeOnNextListener listener){ mOnNextListener = listener; mContext = context; mProgressHandler = new ProgressHandler(mContext, this, cancelable, text); } public ProgressSubscriber(Context context, boolean cancelable, boolean unsubscribable, String text, SubscribeOnNextListener listener){ mOnNextListener = listener; mContext = context; mUnsubscribable = unsubscribable; mProgressHandler = new ProgressHandler(mContext, this, cancelable, text); } public void showProgressDialog(){ mProgressHandler.initProgressDialog(); } public void dismissProgressDialog(){ mProgressHandler.dismissProgressDialog(); } @Override public void onStart() { super.onStart(); showProgressDialog(); } @Override public void onCompleted() { dismissProgressDialog(); } @Override public void onError(Throwable e) { dismissProgressDialog(); mOnNextListener.onError(e); } @Override public void onNext(Object o) { mOnNextListener.onNext(o); } @Override public void onProgressCanceled() {//取消请求 if(mUnsubscribable && !isUnsubscribed()){ unsubscribe(); } } }
2.LoadingDialog的显示与消失
public class ProgressHandler /*extends Handler*/ { public static final int SHOW_PROGRESS = 0; public static final int DISMISS_PROGRESS = 1; private CommonLoadingDialog mDialog; private Context mContext; private ProgressCancelListener mProgressCancelListener; private boolean cancelable; private String mText; public ProgressHandler(Context context, ProgressCancelListener listener, boolean cancelable, String text){ this.mContext = context; mProgressCancelListener = listener; this.cancelable = cancelable; this.mText = text; } public void initProgressDialog(){ if(mDialog == null){ mDialog = new CommonLoadingDialog(mContext); mDialog.setCancelable(cancelable); mDialog.setCanceledOnTouchOutside(false); mDialog.setMessage(mText); if(cancelable){ mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { mProgressCancelListener.onProgressCanceled(); } }); } if(!mDialog.isShowing()){ mDialog.show();//显示进度条 } } } public void dismissProgressDialog(){ if(mDialog!=null){ mDialog.dismiss();//取消进度条 mDialog = null; } } }
3.取消dialog监听
public interface ProgressCancelListener { void onProgressCanceled(); }
4.Subscriber事件监听
public interface SubscribeOnNextListener<T> { void onNext(T t); void onError(Throwable e); }5.封装后的使用
public void updateWechatGoodsType(Context context, String userName, String userPwd, String merchantId, String fCategoryId, Device device) { mModel.updateWechatGoodsType(userName, userPwd, merchantId, fCategoryId, device, new ProgressSubscriber(context, true, context.getString(R.string.deal_with_content), new SubscribeOnNextListener<ResultModel>() { @Override public void onNext(ResultModel resultModel) { if(iView.get()!=null) { iView.get().handleCommand(resultModel); } } @Override public void onError(Throwable e) { } })); }
相关文章推荐
- flex加载进度条的使用
- [置顶] 第十三章——表和索引分区(2)——使用拆分删除和加载大数据
- Rxjava 和 Retrofit 的封装使用
- Android应用架构之Retrofit使用 RxJava 详解 jsoup Android 平滑图片加载和缓存库 Glide 使用详解
- Android 使用RxJava+Retrofit +Realm 组合加载数据 <读取缓存 显示 请求网络数据 缓存最新数据 更新界面>(二)
- Flex进度条控件ProgressBar使用讲解加载图片显示进度演示
- [置顶] 使用OC加载图片的两种方式及其区别
- 使用RxJava和RxAndroid封装RxBus,实现EventBus功能
- [置顶] WebView怎么使用 关于webview加载网页最基本的用法
- 使用 RxJava 从多种来源中加载数据
- [置顶] highcharts封装使用总结
- 数字图像处理 CImage类的使用与封装(jpg png gif tif bmp等格式图像的加载、数据读写、保存等功能)
- [置顶] Android使用WebView加载图片防止OutOfMemoryError
- [置顶] 使用ImageLoader加载网络图片时,如何获取加载进度,如何设置进度条
- nprogress页面加载进度条使用
- flex加载进度条的使用
- [置顶] Android_ListView_Adapter使用和数据动态加载
- [Cocoa]_[初级]_[使用异步线程加载图片文件实现进度条的更新]
- Android 图片加载工具类 Universal-Image-Loader 的封装和使用示例
- [安卓开发] Glide图片加载库的简单封装使用