me.jessyan.progressmanager.ProgressManager Java Examples

The following examples show how to use me.jessyan.progressmanager.ProgressManager. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: AdvanceActivity.java    From ProgressManager with Apache License 2.0 6 votes vote down vote up
private void initListener() {
    //图片和下载 (上传也同样支持) 使用同一个 url 地址,是为了展示高级功能
    //高级功能是为了应对当需要使用同一个 url 地址根据 Post 请求参数的不同而下载或上传不同资源的情况
    //"http://jessyancoding.github.io/images/RxCache.png" 会重定向到 "http://jessyan.me/images/RxCache.png"
    //所以也展示了高级功能同时完美兼容重定向
    //这里需要注意的是虽然使用的是新的 url 地址进行上传或下载,但实际请求服务器的 url 地址,还是原始的 url 地址
    //在监听器内部已经进行了处理,所以高级功能并不会影响服务器的请求

    //Glide 加载监听
    mNewImageUrl = ProgressManager
            .getInstance()
            .addDiffResponseListenerOnSameUrl("http://jessyancoding.github.io/images/RxCache.png", getGlideListener());


    //Okhttp/Retofit 下载监听
    mNewDownloadUrl = ProgressManager
            .getInstance()
            .addDiffResponseListenerOnSameUrl("http://jessyancoding.github.io/images/RxCache.png", getDownloadListener());


    //Okhttp/Retofit 上传监听
    mNewUploadUrl = ProgressManager
            .getInstance()
            .addDiffRequestListenerOnSameUrl("http://upload.qiniu.com/", "test", getUploadListener());
}
 
Example #2
Source File: AdvanceActivity.java    From ProgressManager with Apache License 2.0 6 votes vote down vote up
/**
 * 点击开始上传资源,为了演示,就不做重复点击的处理,即允许用户在还有进度没完成的情况下,使用同一个 url 开始新的上传
 */
private void uploadStart() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                //为了方便就不动态申请权限了,直接将文件放到CacheDir()中
                File file = new File(getCacheDir(), "a.java");
                //读取Assets里面的数据,作为上传源数据
                writeToFile(getAssets().open("a.java"), file);

                Request request = new Request.Builder()
                        .url(mNewUploadUrl)
                        .post(RequestBody.create(MediaType.parse("multipart/form-data"), file))
                        .build();

                Response response = mOkHttpClient.newCall(request).execute();
                response.body();
            } catch (IOException e) {
                e.printStackTrace();
                //当外部发生错误时,使用此方法可以通知所有监听器的 onError 方法
                ProgressManager.getInstance().notifyOnErorr(mNewUploadUrl, e);
            }
        }
    }).start();
}
 
Example #3
Source File: MainActivity.java    From ProgressManager with Apache License 2.0 6 votes vote down vote up
/**
 * 点击开始上传资源,为了演示,就不做重复点击的处理,即允许用户在还有进度没完成的情况下,使用同一个 url 开始新的上传
 */
private void uploadStart() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                //为了方便就不动态申请权限了,直接将文件放到CacheDir()中
                File file = new File(getCacheDir(), "a.java");
                //读取Assets里面的数据,作为上传源数据
                writeToFile(getAssets().open("a.java"), file);

                Request request = new Request.Builder()
                        .url(mUploadUrl)
                        .post(RequestBody.create(MediaType.parse("multipart/form-data"), file))
                        .build();

                Response response = mOkHttpClient.newCall(request).execute();
                response.body();
            } catch (IOException e) {
                e.printStackTrace();
                //当外部发生错误时,使用此方法可以通知所有监听器的 onError 方法
                ProgressManager.getInstance().notifyOnErorr(mUploadUrl, e);
            }
        }
    }).start();
}
 
Example #4
Source File: AdvanceActivity.java    From ProgressManager with Apache License 2.0 5 votes vote down vote up
/**
 * 点击开始下载资源,为了演示,就不做重复点击的处理,即允许用户在还有进度没完成的情况下,使用同一个 url 开始新的下载
 */
private void downloadStart() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Request request = new Request.Builder()
                        .url(mNewDownloadUrl)
                        .build();

                Response response = mOkHttpClient.newCall(request).execute();

                InputStream is = response.body().byteStream();
                //为了方便就不动态申请权限了,直接将文件放到CacheDir()中
                File file = new File(getCacheDir(), "download");
                FileOutputStream fos = new FileOutputStream(file);
                BufferedInputStream bis = new BufferedInputStream(is);
                byte[] buffer = new byte[1024];
                int len;
                while ((len = bis.read(buffer)) != -1) {
                    fos.write(buffer, 0, len);
                }
                fos.flush();
                fos.close();
                bis.close();
                is.close();


            } catch (IOException e) {
                e.printStackTrace();
                //当外部发生错误时,使用此方法可以通知所有监听器的 onError 方法
                ProgressManager.getInstance().notifyOnErorr(mNewDownloadUrl, e);
            }
        }
    }).start();
}
 
Example #5
Source File: AdvanceFragment.java    From ProgressManager with Apache License 2.0 5 votes vote down vote up
private void initData() {
    Bundle arguments = getArguments();
    ArrayList<String> list = arguments.getStringArrayList(URL_BUNDLE_KEY);
    if (list == null || list.isEmpty())
        return;
    //Glide 加载监听
    ProgressManager.getInstance().addResponseListener(list.get(0), getGlideListener());

    //Okhttp/Retofit 下载监听
    ProgressManager.getInstance().addResponseListener(list.get(1), getDownloadListener());

    //Okhttp/Retofit 上传监听
    ProgressManager.getInstance().addRequestListener(list.get(2), getUploadListener());
    list.clear(); //清理 list 的引用
}
 
Example #6
Source File: MainFragment.java    From ProgressManager with Apache License 2.0 5 votes vote down vote up
private void initData() {
    Bundle arguments = getArguments();
    ArrayList<String> list = arguments.getStringArrayList(URL_BUNDLE_KEY);
    if (list == null || list.isEmpty())
        return;
    //Glide 加载监听
    ProgressManager.getInstance().addResponseListener(list.get(0), getGlideListener());

    //Okhttp/Retofit 下载监听
    ProgressManager.getInstance().addResponseListener(list.get(1), getDownloadListener());

    //Okhttp/Retofit 上传监听
    ProgressManager.getInstance().addRequestListener(list.get(2), getUploadListener());
    list.clear();//清理 list 里的引用
}
 
Example #7
Source File: MainActivity.java    From ProgressManager with Apache License 2.0 5 votes vote down vote up
/**
 * 点击开始下载资源,为了演示,就不做重复点击的处理,即允许用户在还有进度没完成的情况下,使用同一个 url 开始新的下载
 */
private void downloadStart() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Request request = new Request.Builder()
                        .url(mDownloadUrl)
                        .build();

                Response response = mOkHttpClient.newCall(request).execute();

                InputStream is = response.body().byteStream();
                //为了方便就不动态申请权限了,直接将文件放到CacheDir()中
                File file = new File(getCacheDir(), "download");
                FileOutputStream fos = new FileOutputStream(file);
                BufferedInputStream bis = new BufferedInputStream(is);
                byte[] buffer = new byte[1024];
                int len;
                while ((len = bis.read(buffer)) != -1) {
                    fos.write(buffer, 0, len);
                }
                fos.flush();
                fos.close();
                bis.close();
                is.close();


            } catch (IOException e) {
                e.printStackTrace();
                //当外部发生错误时,使用此方法可以通知所有监听器的 onError 方法
                ProgressManager.getInstance().notifyOnErorr(mDownloadUrl, e);
            }
        }
    }).start();
}
 
Example #8
Source File: BaseApplication.java    From ProgressManager with Apache License 2.0 4 votes vote down vote up
@Override
public void onCreate() {
    super.onCreate();
    this.mOkHttpClient = ProgressManager.getInstance().with(new OkHttpClient.Builder())
            .build();
}
 
Example #9
Source File: GlobalConfiguration.java    From MVPArms with Apache License 2.0 4 votes vote down vote up
@Override
    public void applyOptions(@NonNull Context context, @NonNull GlobalConfigModule.Builder builder) {
        if (!BuildConfig.LOG_DEBUG) { //Release 时, 让框架不再打印 Http 请求和响应的信息
            builder.printHttpLogLevel(RequestInterceptor.Level.NONE);
        }

        builder.baseurl(Api.APP_DOMAIN)
                //强烈建议自己自定义图片加载逻辑, 因为 arms-imageloader-glide 提供的 GlideImageLoaderStrategy 并不能满足复杂的需求
                //请参考 https://github.com/JessYanCoding/MVPArms/wiki#3.4
                .imageLoaderStrategy(new GlideImageLoaderStrategy())

                //想支持多 BaseUrl, 以及运行时动态切换任意一个 BaseUrl, 请使用 https://github.com/JessYanCoding/RetrofitUrlManager
                //如果 BaseUrl 在 App 启动时不能确定, 需要请求服务器接口动态获取, 请使用以下代码
                //以下方式是 Arms 框架自带的切换 BaseUrl 的方式, 在整个 App 生命周期内只能切换一次, 若需要无限次的切换 BaseUrl, 以及各种复杂的应用场景还是需要使用 RetrofitUrlManager 框架
                //以下代码只是配置, 还要使用 Okhttp (AppComponent 中提供) 请求服务器获取到正确的 BaseUrl 后赋值给 GlobalConfiguration.sDomain
                //切记整个过程必须在第一次调用 Retrofit 接口之前完成, 如果已经调用过 Retrofit 接口, 此种方式将不能切换 BaseUrl
//                .baseurl(new BaseUrl() {
//                    @Override
//                    public HttpUrl url() {
//                        return HttpUrl.parse(sDomain);
//                    }
//                })

                //可根据当前项目的情况以及环境为框架某些部件提供自定义的缓存策略, 具有强大的扩展性
//                .cacheFactory(new Cache.Factory() {
//                    @NonNull
//                    @Override
//                    public Cache build(CacheType type) {
//                        switch (type.getCacheTypeId()){
//                            case CacheType.EXTRAS_TYPE_ID:
//                                return new IntelligentCache(500);
//                            case CacheType.CACHE_SERVICE_CACHE_TYPE_ID:
//                                return new Cache(type.calculateCacheSize(context));//自定义 Cache
//                            default:
//                                return new LruCache(200);
//                        }
//                    }
//                })

                //若觉得框架默认的打印格式并不能满足自己的需求, 可自行扩展自己理想的打印格式 (以下只是简单实现)
//                .formatPrinter(new FormatPrinter() {
//                    @Override
//                    public void printJsonRequest(Request request, String bodyString) {
//                        Timber.i("printJsonRequest:" + bodyString);
//                    }
//
//                    @Override
//                    public void printFileRequest(Request request) {
//                        Timber.i("printFileRequest:" + request.url().toString());
//                    }
//
//                    @Override
//                    public void printJsonResponse(long chainMs, boolean isSuccessful, int code,
//                                                  String headers, MediaType contentType, String bodyString,
//                                                  List<String> segments, String message, String responseUrl) {
//                        Timber.i("printJsonResponse:" + bodyString);
//                    }
//
//                    @Override
//                    public void printFileResponse(long chainMs, boolean isSuccessful, int code, String headers,
//                                                  List<String> segments, String message, String responseUrl) {
//                        Timber.i("printFileResponse:" + responseUrl);
//                    }
//                })

                //可以自定义一个单例的线程池供全局使用
//                .executorService(Executors.newCachedThreadPool())

                //这里提供一个全局处理 Http 请求和响应结果的处理类, 可以比客户端提前一步拿到服务器返回的结果, 可以做一些操作, 比如 Token 超时后, 重新获取 Token
                .globalHttpHandler(new GlobalHttpHandlerImpl(context))
                //用来处理 RxJava 中发生的所有错误, RxJava 中发生的每个错误都会回调此接口
                //RxJava 必须要使用 ErrorHandleSubscriber (默认实现 Subscriber 的 onError 方法), 此监听才生效
                .responseErrorListener(new ResponseErrorListenerImpl())
                .gsonConfiguration((context1, gsonBuilder) -> {//这里可以自己自定义配置 Gson 的参数
                    gsonBuilder
                            .serializeNulls()//支持序列化值为 null 的参数
                            .enableComplexMapKeySerialization();//支持将序列化 key 为 Object 的 Map, 默认只能序列化 key 为 String 的 Map
                })
                .retrofitConfiguration((context1, retrofitBuilder) -> {//这里可以自己自定义配置 Retrofit 的参数, 甚至您可以替换框架配置好的 OkHttpClient 对象 (但是不建议这样做, 这样做您将损失框架提供的很多功能)
//                    retrofitBuilder.addConverterFactory(FastJsonConverterFactory.create());//比如使用 FastJson 替代 Gson
                })
                .okhttpConfiguration((context1, okhttpBuilder) -> {//这里可以自己自定义配置 Okhttp 的参数
//                    okhttpBuilder.sslSocketFactory(); //支持 Https, 详情请百度
                    okhttpBuilder.writeTimeout(10, TimeUnit.SECONDS);
                    //使用一行代码监听 Retrofit/Okhttp 上传下载进度监听,以及 Glide 加载进度监听, 详细使用方法请查看 https://github.com/JessYanCoding/ProgressManager
                    ProgressManager.getInstance().with(okhttpBuilder);
                    //让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl, 详细使用方法请查看 https://github.com/JessYanCoding/RetrofitUrlManager
                    RetrofitUrlManager.getInstance().with(okhttpBuilder);
                })
                .rxCacheConfiguration((context1, rxCacheBuilder) -> {//这里可以自己自定义配置 RxCache 的参数
                    rxCacheBuilder.useExpiredDataIfLoaderNotAvailable(true);
                    //想自定义 RxCache 的缓存文件夹或者解析方式, 如改成 FastJson, 请 return rxCacheBuilder.persistence(cacheDirectory, new FastJsonSpeaker());
                    //否则请 return null;
                    return null;
                });
    }
 
Example #10
Source File: MainActivity.java    From ProgressManager with Apache License 2.0 3 votes vote down vote up
private void initListener() {
    //Glide 加载监听
    ProgressManager.getInstance().addResponseListener(mImageUrl, getGlideListener());


    //Okhttp/Retofit 下载监听
    ProgressManager.getInstance().addResponseListener(mDownloadUrl, getDownloadListener());


    //Okhttp/Retofit 上传监听
    ProgressManager.getInstance().addRequestListener(mUploadUrl, getUploadListener());
}