public final class ProgressManager extends Object
Interceptor,所以使用前请确保你使用 Okhttp 或 Retrofit 进行网络请求
实现原理类似 EventBus,你可在 App 中的任何地方,将多个监听器,以 url 地址作为标识符,注册到本管理器
当此 url 地址存在下载或者上传的动作时,管理器会主动调用所有使用此 url 地址注册过的监听器,达到多个模块的同步更新
Created by JessYan on 02/06/2017 18:37 Contact me Follow me ================================================
| Modifier and Type | Field and Description |
|---|---|
static int |
DEFAULT_REFRESH_TIME |
static boolean |
DEPENDENCY_OKHTTP |
static String |
IDENTIFICATION_HEADER |
static String |
IDENTIFICATION_NUMBER |
static String |
LOCATION_HEADER |
static String |
OKHTTP_PACKAGE_NAME |
public static final String OKHTTP_PACKAGE_NAME
public static final boolean DEPENDENCY_OKHTTP
public static final int DEFAULT_REFRESH_TIME
public static final String IDENTIFICATION_NUMBER
public static final String IDENTIFICATION_HEADER
public static final String LOCATION_HEADER
public static final ProgressManager getInstance()
public void setRefreshTime(int refreshTime)
ProgressListener.onProgress(ProgressInfo) 每次被调用的间隔时间refreshTime - 间隔时间,单位毫秒public void addRequestListener(String url, ProgressListener listener)
url 注册到管理器,此操作请在页面初始化时进行,切勿多次注册同一个(内容相同)监听器url - url 作为标识符listener - 当此 url 地址存在上传的动作时,此监听器将被调用public void addResponseListener(String url, ProgressListener listener)
url 注册到管理器,此操作请在页面初始化时进行,切勿多次注册同一个(内容相同)监听器url - url 作为标识符listener - 当此 url 地址存在下载的动作时,此监听器将被调用public void notifyOnErorr(String url, Exception e)
ProgressRequestBody 和 ProgressResponseBody 内部处理二进制流时发生错误
会主动调用 ProgressListener.onError(long, Exception),但是有些错误并不是在它们内部发生的
但同样会引起网络请求的失败,所以向外面提供notifyOnErorr(java.lang.String, java.lang.Exception),当外部发生错误时
手动调用此方法,以通知所有的监听器url - url 作为标识符e - 错误public okhttp3.OkHttpClient.Builder with(okhttp3.OkHttpClient.Builder builder)
OkHttpClient.Builder 传入,配置一些本管理器需要的参数builder - public okhttp3.Request wrapRequestBody(okhttp3.Request request)
request - 原始的 Requestpublic okhttp3.Response wrapResponseBody(okhttp3.Response response)
response - 原始的 Responsepublic String addDiffResponseListenerOnSameUrl(String originUrl, ProgressListener listener)
url 根据 Post 请求参数的不同而下载不同资源的情况
请使用 addDiffResponseListenerOnSameUrl(String, ProgressListener) 代替 addResponseListener(java.lang.String, me.jessyan.progressmanager.ProgressListener)
addDiffResponseListenerOnSameUrl(String, ProgressListener) 会返回一个加入了时间戳的新的 url
请使用这个新的 url 去代替 originUrl 进行下载的请求即可 (当实际请求时依然使用 originUrl 进行网络请求)
addDiffResponseListenerOnSameUrl(String, ProgressListener) 与 addDiffResponseListenerOnSameUrl(String, String, ProgressListener)
的区别在于:
addDiffResponseListenerOnSameUrl(String, String, ProgressListener) 可以使用不同的 key 来自定义新的 url
addDiffResponseListenerOnSameUrl(String, ProgressListener) 是直接使用时间戳来生成新的 url
originUrl - originUrl 作为基础并结合时间戳用于生成新的 url 作为标识符listener - 当加入了时间戳的新的 url 地址存在下载的动作时,此监听器将被调用urlpublic String addDiffResponseListenerOnSameUrl(String originUrl, String key, ProgressListener listener)
url 根据 Post 请求参数的不同而下载不同资源的情况
请使用 addDiffResponseListenerOnSameUrl(String, String, ProgressListener) 代替 addResponseListener(java.lang.String, me.jessyan.progressmanager.ProgressListener)
请使用 addDiffResponseListenerOnSameUrl(String, String, ProgressListener) 会返回一个 originUrl 结合 key 生成的新的 url
请使用这个新的 url 去代替 originUrl 进行下载的请求即可 (当实际请求时依然使用 originUrl 进行网络请求)
addDiffResponseListenerOnSameUrl(String, ProgressListener) 与 addDiffResponseListenerOnSameUrl(String, String, ProgressListener)
的区别在于:
addDiffResponseListenerOnSameUrl(String, String, ProgressListener) 可以使用不同的 key 来自定义新的 url
addDiffResponseListenerOnSameUrl(String, ProgressListener) 是直接使用时间戳来生成新的 url
Example usage:
String newUrl = ProgressManager.getInstance().addDiffResponseListenerOnSameUrl(DOWNLOAD_URL, "id", getDownloadListener());
new Thread(new Runnable() {
public void run() {
try {
Request request = new Request.Builder()
.url(newUrl) // 请一定使用 addDiffResponseListenerOnSameUrl 返回的 newUrl 做请求
.build();
Response response = mOkHttpClient.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
//当外部发生错误时,使用此方法可以通知所有监听器的 onError 方法,这里也要使用 newUrl
ProgressManager.getInstance().notifyOnErorr(newUrl, e);
}
}
}).start();
originUrl - originUrl 作为基础并结合 key 用于生成新的 url 作为标识符key - originUrl 作为基础并结合 key 用于生成新的 url 作为标识符listener - 当 originUrl 结合 key 生成的新的 url 地址存在下载的动作时,此监听器将被调用originUrl 结合 key 生成的新的 urlpublic String addDiffRequestListenerOnSameUrl(String originUrl, ProgressListener listener)
url 根据 Post 请求参数的不同而上传不同资源的情况
请使用 addDiffRequestListenerOnSameUrl(String, ProgressListener) 代替 addRequestListener(java.lang.String, me.jessyan.progressmanager.ProgressListener)
addDiffRequestListenerOnSameUrl(String, ProgressListener) 会返回一个加入了时间戳的新的 url
请使用这个新的 url 去代替 originUrl 进行上传的请求即可 (当实际请求时依然使用 originUrl 进行网络请求)
addDiffRequestListenerOnSameUrl(String, ProgressListener) 与 addDiffRequestListenerOnSameUrl(String, String, ProgressListener)
的区别在于:
addDiffRequestListenerOnSameUrl(String, String, ProgressListener) 可以使用不同的 key 来自定义新的 url
addDiffRequestListenerOnSameUrl(String, ProgressListener) 是直接使用时间戳来生成新的 url
originUrl - originUrl 作为基础并结合时间戳用于生成新的 url 作为标识符listener - 当加入了时间戳的新的 url 地址存在上传的动作时,此监听器将被调用urlpublic String addDiffRequestListenerOnSameUrl(String originUrl, String key, ProgressListener listener)
url 根据 Post 请求参数的不同而上传不同资源的情况
请使用 addDiffRequestListenerOnSameUrl(String, ProgressListener) 代替 addRequestListener(java.lang.String, me.jessyan.progressmanager.ProgressListener)
addDiffRequestListenerOnSameUrl(String, ProgressListener) 会返回一个 originUrl 结合 key 生成的新的 url
请使用这个新的 url 去代替 originUrl 进行上传的请求即可 (当实际请求时依然使用 originUrl 进行网络请求)
addDiffRequestListenerOnSameUrl(String, ProgressListener) 与 addDiffRequestListenerOnSameUrl(String, String, ProgressListener)
的区别在于:
addDiffRequestListenerOnSameUrl(String, String, ProgressListener) 可以使用不同的 key 来自定义新的 url
addDiffRequestListenerOnSameUrl(String, ProgressListener) 是直接使用时间戳来生成新的 url
Example usage:
String newUrl = ProgressManager.getInstance().addDiffRequestListenerOnSameUrl(UPLOAD_URL, "id", getUploadListener());
new Thread(new Runnable() {
public void run() {
try {
File file = new File(getCacheDir(), "cache");
Request request = new Request.Builder()
.url(newUrl) // 请一定使用 addDiffRequestListenerOnSameUrl 返回的 newUrl 做请求
.post(RequestBody.create(MediaType.parse("multipart/form-data"), file))
.build();
Response response = mOkHttpClient.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
//当外部发生错误时,使用此方法可以通知所有监听器的 onError 方法,这里也要使用 newUrl
ProgressManager.getInstance().notifyOnErorr(newUrl, e);
}
}
}).start();
originUrl - originUrl 作为基础并结合 key 用于生成新的 url 作为标识符key - originUrl 作为基础并结合 key 用于生成新的 url 作为标识符listener - 当 originUrl 结合 key 生成的新的 url 地址存在上传的动作时,此监听器将被调用originUrl 结合 key 生成的新的 url