Skip to content

Latest commit

 

History

History
62 lines (53 loc) · 2.81 KB

PROGRESS.md

File metadata and controls

62 lines (53 loc) · 2.81 KB

下载/上传进度监听

  • 通过OkHttp的拦截器实现的下载、上传进度监听功能,同时支持OkHttpRetrofit

OkHttpClient的使用方法

安装方法
监听下载进度
  1. 在构建Request对象时,构建一个DlProgressCallback实例,并通过tag(Class<T>, T)方法添加到Request.Builder中。
  2. 在下载文件或请求网络时,服务器数据传输到本地时会调用该回调实例的update方法,参数是一个float值,可通过(progress * 100).toInt()来得到下载进度的百分比。
  3. 注意:update方法运行在子线程中(与Interceptor.intercept方法的调用线程一致)。
val request = Request.Builder()
    .tag(DlProgressCallback::class.java, DlProgressCallback { progress ->
        val percent = (progress * 100).toInt()
        TODO("处理下载进度监听")
    })
    ...
监听上传进度
  1. 上传进度则构建一个UpProgressCallback实例,并通过tag(Class<T>, T)方法添加到Request.Builder中。
  2. 在上传文件或请求网络时,本地数据传输到服务器时会调用该回调实例的update方法,参数是一个float值,可通过(progress * 100).toInt()来得到下载进度的百分比。
  3. 注意:update方法运行在子线程中(与Interceptor.intercept方法的调用线程一致)。
val request = Request.Builder()
    .tag(UpProgressCallback::class.java, UpProgressCallback { progress ->
        val percent = (progress * 100).toInt()
        TODO("处理上传进度监听")
    })
    ...

OkHttpClient的使用方法

Retrofit的安装方法

  • 参考OkHttpClient的安装方法,向OkHttpClient中添加ProgressInterceptor监听器,并添加到Retrofit中。
监听下载进度
  1. 在声明的接口中添加DlProgressCallback类型的参数,并标记@Tag注解。
  2. 在调用该接口时,创建DlProgressCallback实例,并作为参数传递给该接口中即可。
/** 
 * url 文件的下载地址
 * callback 下载进度的监听接口
 * */
@GET
@Streaming
suspend fun download(@Url url: String, @Tag callback: DlProgressCallback): Call<ResponseBody>
监听上传进度
  1. 在声明的接口中添加UpProgressCallback类型的参数,并标记@Tag注解。
  2. 在调用该接口时,创建UpProgressCallback实例,并作为参数传递给该接口中即可。
@POST
@Streaming
suspend fun upload(@Url url: String, @Tag callback: UpProgressCallback): Call<Unit>