gpt4 book ai didi

android - LiveDataScope 代码块在 emit() 之后是否只运行一次?

转载 作者:行者123 更新时间:2023-12-02 13:44:13 24 4
gpt4 key购买 nike

如标题所述,LiveDataScope 代码块是否在 emit() 之后仅运行一次?
是否可以让我的 LiveDataScope 代码块运行不止一次,因为我需要向服务器发出请求,如果它失败了,我想调用相同的代码再试一次。

代码示例:

    fun refreshLiveDataResource() = liveData(Dispatchers.Main){
val retriveRoutes = remoteDataSourceKt.getRoutes()
if(retriveRoutes.data != null){
routeList = retriveRoutes.data
}
emit(retriveRoutes)
}

当我调用这个函数时,如果我再次调用函数,在 emit() 之后,永远不会进入。

最佳答案

您应该创建一个 LiveData一次并在需要时更新其值,而不是每次要重试时都创建一个新值。我会使用 Flow相反,更新 LiveData , 带有 retry运算符(operator)以防万一出现错误,如下所示:

val routesLiveData =
remoteDataSourceKt.getRoutes()
.onEach { retriveRoutes ->
if(retriveRoutes.data != null){
routeList = retriveRoutes.data
}
}
.retry(3) { e -> // retries up to 3 times; no argument means retrying forever
(e is IOException) // retry on any IOException but also introduce delay if retrying
.also {
if (it)
delay(1000)
}
}
.asLiveData()

你必须:
  • 制作 getRoutes()方法返回 Flow .
  • 确保 Flow作品 Dispatchers.IO .
  • 关注 myLiveData从您的用户界面。
  • 关于android - LiveDataScope 代码块在 emit() 之后是否只运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60494120/

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