管灌系统巡查员智能手机App
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package com.dayu.pipirrapp.net.upload;
 
import java.io.IOException;
 
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okio.Buffer;
import okio.BufferedSink;
import okio.ForwardingSink;
import okio.Okio;
import okio.Sink;
 
/**
 * ProgressRequestBody -
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2024-11-28
 */
public class ProgressRequestBody extends RequestBody {
    private final RequestBody requestBody;
    private final ProgressListener progressListener;
 
    public ProgressRequestBody(RequestBody requestBody, ProgressListener progressListener) {
        this.requestBody = requestBody;
        this.progressListener = progressListener;
    }
 
    @Override
    public MediaType contentType() {
        return requestBody.contentType();
    }
 
    @Override
    public long contentLength() throws IOException {
        return requestBody.contentLength();
    }
 
    @Override
    public void writeTo(BufferedSink sink) throws IOException {
        Sink progressSink = new ForwardingSink(sink) {
            long totalBytesWritten = 0;
 
            @Override
            public void write(Buffer source, long byteCount) throws IOException {
                super.write(source, byteCount);
                totalBytesWritten += byteCount;
                if (progressListener != null) {
                    progressListener.onProgress(totalBytesWritten, contentLength(),false);
                }
            }
        };
        BufferedSink bufferedSink = Okio.buffer(progressSink);
        requestBody.writeTo(bufferedSink);
        bufferedSink.flush();
    }
 
 
}