我在项目中使用MVVM体系结构。首次调用时,它可以工作。但是之后,它不起作用。 这是我的代码。
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
h = {}
for i, num in enumerate(nums):
n = target - num
if n not in h:
h[num] = i
else:
return [h[n], i]
}
fun loadYgosuData() : LiveData<ArrayList<YgosuData>> {
Log.d(TAG, "loadYgosuData()...")
return liveData {
Log.d(TAG, "liveData Scope running....")
val element = withContext(Dispatchers.IO) {
Jsoup.connect("https://www.ygosu.com/community/real_article")
.get()
.select("div.board_wrap tbody tr")
}
emit(setYgosuData(element))
}
能帮我吗? 谢谢。
答案 0 :(得分:2)
liveData构建块用作协程和LiveData之间的结构化并发原语。当LiveData变为活动状态时,该代码块开始执行;如果LiveData变为非活动状态,则在可配置的超时后自动取消该代码块。如果在完成之前将其取消,则如果LiveData再次变为活动状态,它将重新启动。如果它在先前的运行中成功完成,则不会重新启动。请注意,只有在自动取消后,它才会重新启动。如果该块由于其他任何原因而被取消(例如引发CancellationException),则不会重新启动。
这就是您第一次提到它的原因。
解决方案1:将liveData与Transformations
组合private val body: MutableLiveData<String> = MutableLiveData()
val YgousData = body.switchMap {
liveData {
Log.d(TAG, "liveData Scope running....")
val element = withContext(Dispatchers.IO) {
Jsoup.connect("https://www.ygosu.com/community/real_article")
.get()
.select("div.board_wrap tbody tr")
}
emit(setYgosuData(element))
}
}
fun callApi(param:String){
body.value = param
}
您可以根据触发API调用的方式更改body
解决方案2:您可以显式进行api调用,然后将数据发布到livedata(不使用livedata构建器)