gpt4 book ai didi

android - OkHttp 请求即使在网络出现故障时也能保持运行

转载 作者:行者123 更新时间:2023-11-29 15:41:56 25 4
gpt4 key购买 nike

我使用 OkHttp3 作为我的客户端,我注意到了这个行为:每当我启动一个请求并且它仍在运行并且我关闭我的数据或互联网访问时,请求仍然继续运行并且不会停止(即没有调用回调)

我的代码是这样写的:

final OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();

Request req = new Request.Builder()
.url("<url>")
.build();

client.newCall(req).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "Failed");
}

@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
Log.d(TAG, "Response");
}
});

我怎样才能阻止它?

因为我希望它在网络出现故障时失败。

最佳答案

您可以注册 ConnectivityManager.CONNECTIVITY_ACTION 广播,这样您就可以在没有网络连接时收到通知并取消您的请求。

来自其documentation :

For a disconnect event, the boolean extra EXTRA_NO_CONNECTIVITY is set to true if there are no connected networks at all.

例如,在您的 Activity 中,您可以执行如下操作:

// ...

private OkHttpClient client;

private final BroadcastReceiver networkChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getBooleanExtra(
ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) {

// no network connection
if (client != null && client.dispatcher() != null) {
client.dispatcher().cancelAll();
}
}
}
};

// ...

@Override
protected void onResume() {
super.onResume();
registerReceiver(networkChangeReceiver,
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}

@Override
protected void onPause() {
unregisterReceiver(networkChangeReceiver);
super.onPause();
}

// ...

关于android - OkHttp 请求即使在网络出现故障时也能保持运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38891829/

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