網(wǎng)絡訪問組件的思考三(okhttp上傳下載)

參考資料:

  1. https://github.com/square/okhttp;

文件的上傳下載,是基礎(chǔ)網(wǎng)絡包的一塊重要部分,基于上面2篇的一些實現(xiàn),首先實現(xiàn)的是 okhttp3的文件上傳下載邏輯;

具體代碼https://github.com/zhaoyubetter/basenet

Builder的修改##

新增2個成員,用來表示上傳下載,信息,注意的是,要么是下載,要么是上傳,不能一次請求,完成2個操作,這里,暫時還沒有考慮好如何去修改,現(xiàn),只實現(xiàn)好了功能;

              /**
         * 上傳的文件
         */
        private Map<String, File> mUploadFiles;
        /**
         * 下載的文件名
         */
        private File mDownFile;

將IRequestCallBack類,修改成抽象類:

public abstract class AbsRequestCallBack<T> {
    public void onSuccess(T t) {
    }

    public void onFailure(Throwable e) {
    }

    // 表示進度
    public void onProgressUpdate(long contentLength, long bytesRead, boolean done) {
    }
}

OkHttpRequest類的修改:

  private void realRequest(Request.Builder tBuilder) {
    if (mDownFile != null) {
          downFile();
          return;
    }

    private void downFile() {
        // 是否是下載
        final OkHttpClient tClient = sOkHttpClient.newBuilder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Response originalResponse = chain.proceed(chain.request());
                return originalResponse.newBuilder()
                        .body(new ProgressResponseBody(originalResponse.body(), new ProgressCallback() {
                            @Override
                            public void update(long contentLength, long bytesRead, boolean done) {
                                if (null != mCallBack) {
                                    mCallBack.onProgressUpdate(contentLength, bytesRead, done);
                                }
                            }
                        })).build();
            }
        }).build();
   

客戶端調(diào)用##

               // 下載文件測試
                final String absolutePath = Environment.getExternalStorageDirectory().getAbsolutePath();
                File file = new File(absolutePath + "/DCIM/Camera/down.jpg");
                new OkHttpRequest.Builder().url("https://raw.githubusercontent.com/zhaoyubetter/MarkdownPhotos/master/C/52C2504C.png").callback(new AbsRequestCallBack() {
                    @Override
                    public void onSuccess(Object o) {
                        Log.e("okHttp success", o.toString());
                    }

                    @Override
                    public void onFailure(Throwable e) {
                        Log.e("okHttp failure", e.toString());
                    }

                    @Override
                    public void onProgressUpdate(long contentLength, long bytesRead, boolean done) {
                        super.onProgressUpdate(contentLength, bytesRead, done);
                        Log.e("okHttp success", String.format("total:%s, already:%s, isDone: %s", contentLength, bytesRead, done));
                    }
                }).downFile(file).build().request();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,175評論 25 708
  • 太長了,還是轉(zhuǎn)載吧...今天在看博客的時候,無意中發(fā)現(xiàn)了@Trinea在GitHub上的一個項目Android開源...
    龐哈哈哈12138閱讀 20,394評論 3 283
  • 從北京出發(fā)的時候,北京正在舉辦“一帶一路”峰會?!昂I辖z綢之路”要重新開始。 到了武夷山,就聽說當?shù)赜袀€“下梅村”...
    韓怡冰閱讀 1,444評論 0 2
  • 不知道你們有沒有發(fā)現(xiàn),我們在獨自做著自己的事情,獨自面對著自己的孤獨,獨自奔跑在自己的人生道路上的時候,我們身邊的...
    二月二十二是星期二閱讀 689評論 9 4
  • 說起吵架,我一向是嗤之以鼻,雖然我也會和別人吵到不可開交,但發(fā)泄完憤怒,便速戰(zhàn)速決,絕不戀戰(zhàn),免得動了肝火...
    艾同同閱讀 1,030評論 0 2

友情鏈接更多精彩內(nèi)容