XiMengJianYu/.svn/pristine/e1/e1bd739462e624a88da1b4b5f4fa33f3e1f699bb.svn-base
2023-04-17 17:58:44 +08:00

66 lines
1.8 KiB
Plaintext
Executable File

package com.cm.utils.net.body;
import com.cm.utils.net.response.DownloadResponseHandler;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.ResponseBody;
import okio.Buffer;
import okio.BufferedSource;
import okio.ForwardingSource;
import okio.Okio;
import okio.Source;
/**
* Created by Xuer on 2017/3/8.
* 重写responsebody 设置下载进度监听
*
*/
public class ResponseProgressBody extends ResponseBody {
private ResponseBody mResponseBody;
private DownloadResponseHandler mDownloadResponseHandler;
private BufferedSource bufferedSource;
public ResponseProgressBody(ResponseBody responseBody, DownloadResponseHandler downloadResponseHandler) {
this.mResponseBody = responseBody;
this.mDownloadResponseHandler = downloadResponseHandler;
}
@Override
public MediaType contentType() {
return mResponseBody.contentType();
}
@Override
public long contentLength() {
return mResponseBody.contentLength();
}
@Override
public BufferedSource source() {
if (bufferedSource == null) {
bufferedSource = Okio.buffer(source(mResponseBody.source()));
}
return bufferedSource;
}
private Source source(Source source) {
return new ForwardingSource(source) {
long totalBytesRead;
@Override
public long read(Buffer sink, long byteCount) throws IOException {
long bytesRead = super.read(sink, byteCount);
totalBytesRead += ((bytesRead != -1) ? bytesRead : 0);
if (mDownloadResponseHandler != null) {
mDownloadResponseHandler.onProgress(totalBytesRead, mResponseBody.contentLength());
}
return bytesRead;
}
};
}
}