package com.example.retrofit.subscribers;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.Toast;
import com.example.retrofit.listener.HttpOnNextListener;
import java.lang.ref.WeakReference;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import rx.Subscriber;
/**
* 用于在Http请求开始时,自动显示一个ProgressDialog
* 在Http请求结束是,关闭ProgressDialog
* 调用者自己对请求数据进行处理
* Created by WZG on 2016/7/16.
*/
public class ProgressSubscriber<T> extends Subscriber<T> {
/*是否弹框*/
private boolean showPorgress=true;
// 回调接口
private HttpOnNextListener mSubscriberOnNextListener;
// 弱引用反正内存泄露
private WeakReference<Context> mActivity;
// 加载框可自己定义
private ProgressDialog pd;
/**
* 初始化
* @param mSubscriberOnNextListener
* @param context
* @param showPorgress 是否需要加载框
* @param cancel 是否能取消加载框
*/
public ProgressSubscriber(HttpOnNextListener mSubscriberOnNextListener, Context context,boolean showPorgress,boolean cancel) {
this.mSubscriberOnNextListener = mSubscriberOnNextListener;
this.mActivity = new WeakReference<>(context);
setShowPorgress(showPorgress);
if(showPorgress){
initProgressDialog(cancel);
}
}
/**
* 初始化加载框
*/
private void initProgressDialog(boolean cancel) {
Context context = mActivity.get();
if (pd == null && context != null) {
pd = new ProgressDialog(context);
pd.setCancelable(cancel);
if (cancel) {
pd.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
onCancelProgress();
}
});
}
}
}
/**
* 显示加载框
*/
private void showProgressDialog() {
if(!isShowPorgress())return;
Context context = mActivity.get();
if (pd == null || context == null) return;
if (!pd.isShowing()) {
pd.show();
}
}
/**
* 隐藏
*/
private void dismissProgressDialog() {
if(!isShowPorgress())return;
if (pd != null && pd.isShowing()) {
pd.dismiss();
}
}
/**
* 订阅开始时调用
* 显示ProgressDialog
*/
@Override
public void onStart() {
showProgressDialog();
}
/**
* 完成,隐藏ProgressDialog
*/
@Override
public void onCompleted() {
dismissProgressDialog();
}
/**
* 对错误进行统一处理
* 隐藏ProgressDialog
*
* @param e
*/
@Override
public void onError(Throwable e) {
Context context = mActivity.get();
if (context == null) return;
if (e instanceof SocketTimeoutException) {
Toast.makeText(context, "网络中断,请检查您的网络状态", Toast.LENGTH_SHORT).show();
} else if (e instanceof ConnectException) {
Toast.makeText(context, "网络中断,请检查您的网络状态", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "错误" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
dismissProgressDialog();
if(mSubscriberOnNextListener!=null){
mSubscriberOnNextListener.onError(e);
}
}
/**
* 将onNext方法中的返回结果交给Activity或Fragment自己处理
*
* @param t 创建Subscriber时的泛型类型
*/
@Override
public void onNext(T t) {
if (mSubscriberOnNextListener != null) {
mSubscriberOnNextListener.onNext(t);
}
}
/**
* 取消ProgressDialog的时候,取消对observable的订阅,同时也取消了http请求
*/
public void onCancelProgress() {
if (!this.isUnsubscribed()) {
this.unsubscribe();
}
}
public boolean isShowPorgress() {
return showPorgress;
}
/**
* 是否需要弹框设置
* @param showPorgress
*/
public void setShowPorgress(boolean showPorgress) {
this.showPorgress = showPorgress;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Rxjava+ReTrofit+okHttp深入浅出-终极封装三(文件上传)
共42个文件
java:13个
xml:9个
png:5个
5星 · 超过95%的资源 需积分: 46 524 下载量 27 浏览量
2016-10-24
11:49:01
上传
评论 3
收藏 101KB RAR 举报
温馨提示
在实际运用中上传是一个必不可少的功能,所以我们在封装二的基础上加入上传的功能,同时需要附带上传进度,结合rxjava使用;原理和封装方法 http://blog.csdn.net/wzgiceman/article/details/51939574
资源推荐
资源详情
资源评论
收起资源包目录
RxjavaRetrofitDemo-master.rar (42个子文件)
RxjavaRetrofitDemo-master
gradlew.bat 2KB
gradlew 5KB
gradle.properties 872B
LICENSE 1KB
app
proguard-rules.pro 706B
src
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 214B
strings.xml 84B
styles.xml 394B
dimens.xml 216B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
activity_down_laod.xml 898B
view_item_holder.xml 1KB
activity_main.xml 1KB
values-w820dp
dimens.xml 364B
java
com
example
retrofit
exception
RetryWhenNetworkException.java 3KB
HttpTimeException.java 877B
http
HttpService.java 731B
HttpManager.java 3KB
subscribers
ProgressSubscriber.java 5KB
activity
MainActivity.java 3KB
entity
UplaodApi.java 1KB
BaseEntity.java 2KB
BaseResultEntity.java 707B
UploadResulte.java 458B
listener
upload
ProgressRequestBody.java 3KB
UploadProgressListener.java 336B
HttpOnNextListener.java 496B
AndroidManifest.xml 1KB
app.iml 13KB
.gitignore 8B
build.gradle 1KB
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 237B
RxjavaRetrofitDemo-master.iml 879B
.gitignore 105B
local.properties 455B
settings.gradle 16B
build.gradle 574B
共 42 条
- 1
wzgiceman
- 粉丝: 743
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页