以下仅提供一些如何实现定时/限时请求功能的思路, 并不限定只有以下描述的方式可以实现
scopeDialog {
// 当接口请求在100毫秒内没有完成会抛出异常TimeoutCancellationException
withTimeout(100) {
Get<String>(Api.BANNER).await()
}
}.catch {
Log.e("日志", "catch", it) // catch无法接收到CancellationException异常
}.finally {
Log.e("日志", "finally", it) // TimeoutCancellationException属于CancellationException子类故只会被finally接收到
if (it is TimeoutCancellationException) {
toast("由于未在指定时间完成请求则取消请求")
}
}
指定请求10次
scopeNetLife {
// 每两秒请求一次, 总共执行10次
repeat(20) {
delay(1000)
val data =
Get<String>("http://api.k780.com/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json").await()
binding.tvContent.text =
JSONObject(data).getJSONObject("result").getString("datetime_2")
// 通过return@repeat可以终止循环
}
}
无限循环请求, 可以根据某个条件break
退出
scopeNetLife {
// 每两秒请求一次, 总共执行10次
while (true) {
delay(1.toDuration(DurationUnit.SECONDS))
val data =
Get<String>("http://api.k780.com/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json").await()
binding.tvContent.text =
JSONObject(data).getJSONObject("result").getString("datetime_2")
// 通过break可以终止循环
}
}
建议下载源码查看