网络状态重试回调
Network status retry callback
我有一个 API return 网络状态,我想为 API 调用添加重试和取消功能
@GET("{path1}/{path2}")
suspend fun status(
@HeaderMap headers: Map<String, String>
): Status?
这是调用 API 的服务 class
override suspend fun status(): Status? =
service.status(
path1 = PATH_ONE,
path2 = PATH_TWO,
headers = mapOf(
USER_AGENT to userAgent,
ACCEPT to accept,
ACCEPT_LANGUAGE to locale,
X_APP_GUID to xAppGuid
)
)
我面临的问题是,要使用 retrofit2.enqueue() 和 retrofit2.cancel() 函数,我需要将 status() 函数的 return 类型更改为调用,但随后我面临无法向用户 return 的问题,因为 Call() 是一个接口且无法实例化,我需要 return 实际状态。
有人知道怎么做吗?
当使用 Retrofit with Coroutines 时你不需要使用 Call
.
suspend
函数(由 Retrofit 返回)是可取消的,取消时会尝试取消调用。这意味着:
myScope.launch { status(...) }
将在 myScope
被取消时被取消。您也可以保留对返回的 Job
的引用并自行取消。
要重试,您可以查看
retryIO(times = 3) { status(...) }
我有一个 API return 网络状态,我想为 API 调用添加重试和取消功能
@GET("{path1}/{path2}")
suspend fun status(
@HeaderMap headers: Map<String, String>
): Status?
这是调用 API 的服务 class
override suspend fun status(): Status? =
service.status(
path1 = PATH_ONE,
path2 = PATH_TWO,
headers = mapOf(
USER_AGENT to userAgent,
ACCEPT to accept,
ACCEPT_LANGUAGE to locale,
X_APP_GUID to xAppGuid
)
)
我面临的问题是,要使用 retrofit2.enqueue() 和 retrofit2.cancel() 函数,我需要将 status() 函数的 return 类型更改为调用,但随后我面临无法向用户 return 的问题,因为 Call() 是一个接口且无法实例化,我需要 return 实际状态。
有人知道怎么做吗?
当使用 Retrofit with Coroutines 时你不需要使用 Call
.
suspend
函数(由 Retrofit 返回)是可取消的,取消时会尝试取消调用。这意味着:
myScope.launch { status(...) }
将在 myScope
被取消时被取消。您也可以保留对返回的 Job
的引用并自行取消。
要重试,您可以查看
retryIO(times = 3) { status(...) }