我正在尝试实现一个进度条来指示多部分文件上载的进度.
我已经阅读了对这个答案的评论 - /sf/answers/1699994341/,我必须将传递给传递给RequestBody的接收器包装起来并提供跟踪移动的字节的回调.
我已经创建了一个自定义RequestBody并使用CustomSink类包装了接收器,但是通过调试我可以看到字节是由RealBufferedSink ln 44 编写的,而自定义接收器写入方法只运行一次,不允许我跟踪移动的字节数.
private class CustomRequestBody extends RequestBody {
MediaType contentType;
byte[] content;
private CustomRequestBody(final MediaType contentType, final byte[] content) {
this.contentType = contentType;
this.content = content;
}
@Override
public MediaType contentType() {
return contentType;
}
@Override
public long contentLength() {
return content.length;
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
CustomSink customSink = new CustomSink(sink);
customSink.write(content);
}
}
private class CustomSink implements BufferedSink {
private static final String TAG = "CUSTOM_SINK"; …Run Code Online (Sandbox Code Playgroud) 是否可以使用 Retrofit 2 和 OkHttp 3获得上传文件的实际进度?
我正在测试这个解决方案:https : //stackoverflow.com/a/36260692/1885562 但它没有像你预期的那样工作。几十毫秒后,我获得了 100% 的进度,但上传应该需要 10 秒以上(1Mbit 连接上的 3MB 文件)。我猜在实际的 HTTP 调用之前有某种缓冲区。
如何解决这个问题?
我正在尝试使用OkHttp跟踪上传的进度.我创建了一个RequestBody带有以下主体的自定义(由此答案提供),它写入接收器并发布进度.
public class CountingFileRequestBody extends RequestBody {
private static final String TAG = "CountingFileRequestBody";
private final ProgressListener listener;
private final String key;
private final MultipartBody multipartBody;
protected CountingSink mCountingSink;
public CountingFileRequestBody(MultipartBody multipartBody,
String key,
ProgressListener listener) {
this.multipartBody = multipartBody;
this.listener = listener;
this.key = key;
}
@Override
public long contentLength() throws IOException {
return multipartBody.contentLength();
}
@Override
public MediaType contentType() {
return multipartBody.contentType();
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
mCountingSink = new …Run Code Online (Sandbox Code Playgroud) 我正在开发一个上载大量数据的应用程序。我想确定上传的传输速率,以显示在通知中。
我对这些帖子中的答案不满意,因此我再次询问。
我看过显示上传传输速率的应用程序,以及一些自定义ROM,例如Resurrection Remix。
如何确定这些上传的传输速率?