gpt4 book ai didi

android - 如何为OkHttp中的数据流编写重试拦截器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:02 25 4
gpt4 key购买 nike

或者认为适用于这种情况的拦截器?

我们的应用程序使用 OkHttp 下载文件(新版本的应用程序、每日数据库等)

有时服务器会在应用程序传输字节时发生故障(顺便说一句,问题是,recvfrom 失败:ECONNRESET)

所以为了解决这个问题,我只想编写 OkHttp 重试拦截器。但这似乎适用于非流媒体操作。

是否有解决方案(如拦截器)来处理这种情况?


为了更清楚的阐述

0%==============================100%(刚开始流式传输)/p>

0%==============================100%(10%完成)

0%==============================100%(20%完成)

0%==============================100%(ECONNRESET -连接由对等方重置)

就在此时,流式传输停止了。我希望从 OkHttp 得到的是识别这种情况然后从头开始(而不是从 20%)开始流


相关代码在此,关注评论

 Call call = client.newCall(new Request.Builder().url(url).get().build());
Response response = call.execute();
// PROBLEM DOES NOT OCCUR THERE
// PROBLEM DOES NOT OCCUR THERE
// PROBLEM DOES NOT OCCUR THERE
if (response.code() == 200 || response.code() == 201) {
InputStream inputStream = null;
try {
long downloaded = 0;
byte[] buff = new byte[1024 * 4];
inputStream = response.body().byteStream();
long target = response.body().contentLength();
while (true) {
// EXCEPTION OCCURS THERE
// EXCEPTION OCCURS THERE
// EXCEPTION OCCURS THERE
int read = inputStream.read(buff);
if (read == -1) {
break;
}
downloaded += read;
}
...
} catch (IOException e) {
// EXCEPTION SAYS
// ECONNRESET - Connection reset by peer
...
}
}

最佳答案

您可以编写如下自定义拦截器:

OkHttp has Interceptors .您需要一个像下面这样的自定义拦截器:

public class CustomResponseInterceptor implements Interceptor {

private final String TAG = getClass().getSimpleName();

@Override
public Response intercept(Object object) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if (response.code() != 200//Your error code here,) {
//Cancel your Request here
return something;
}
Log.d(TAG, "INTERCEPTED:$ " response.toString());
return response;
}

显示的代码摘自 this Medium Article on Interceptors .
你也可以看看this library它实现了重试拦截器,但您可以修改它以供您使用。

关于android - 如何为OkHttp中的数据流编写重试拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50156589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com