66 lines
1.8 KiB
Plaintext
Executable File
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;
|
|
}
|
|
};
|
|
}
|
|
}
|