Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android livedata协同程序不观察数据_Android_Android Livedata_Kotlin Coroutines_Coroutine - Fatal编程技术网

Android livedata协同程序不观察数据

Android livedata协同程序不观察数据,android,android-livedata,kotlin-coroutines,coroutine,Android,Android Livedata,Kotlin Coroutines,Coroutine,我在项目中使用MVVM体系结构。当它第一次调用时,它工作正常。但在那之后,它就不起作用了。 这是我的密码 fun loadYgosuData() : LiveData<ArrayList<YgosuData>> { Log.d(TAG, "loadYgosuData()...") return liveData { Log.d(TAG, "liveData Scope running....")

我在项目中使用MVVM体系结构。当它第一次调用时,它工作正常。但在那之后,它就不起作用了。 这是我的密码

 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))
   }
fun loadYgosuData():LiveData{
Log.d(标记“loadYgosuData()…”)
返回实时数据{
Log.d(标记“正在运行的liveData范围…”)
val元素=withContext(Dispatchers.IO){
Jsoup.connect(“https://www.ygosu.com/community/real_article")
.get()
.选择(“分区板/包裹体tr”)
}
发射(setYgosuData(元素))
}
}

fun setYgosuData(tmpDoc:Elements?):数组列表{
var tmpList=ArrayList()
if(tmpDoc!=null){
//Log.d(标签,“元素:$tmpDoc”)
对于(tmpDoc中的e){
var title=e.select(“td.tit a”)
var name=e.select(“td.name a”)
var read=e.select(“td.read”)
var日期=e.select(“td.date”)
var url=e.select(“td.tit a”).attr(“href”).toString()
var tmpYgosuData=YgosuData(
title=title.text(),
name=name.text(),
read=read.text(),
日期=日期。文本(),
url=url
)
tmpList.add(tmpYgosuData)
}
}
Log.d(标记,“여기2${tmpList.toString()}”)
返回tmpList
}
你能帮我吗? 谢谢。

来自

liveData构建块充当协同路由和liveData之间的结构化并发原语。当LiveData变为活动状态时,代码块开始执行,当LiveData变为非活动状态时,代码块在可配置的超时后自动取消。如果在完成之前取消,则如果LiveData再次变为活动状态,则会重新启动。如果在上一次运行中成功完成,则不会重新启动。请注意,只有在自动取消时才会重新启动。如果由于任何其他原因(例如引发CancelationException)取消了该块,则不会重新启动该块

这就是你提到的第一次成功的原因

解决方案1:将liveData与

private val body:MutableLiveData=MutableLiveData()
val YgousData=body.switchMap{
实时数据{
Log.d(标记“正在运行的liveData范围…”)
val元素=withContext(Dispatchers.IO){
Jsoup.connect(“https://www.ygosu.com/community/real_article")
.get()
.选择(“分区板/包裹体tr”)
}
发射(setYgosuData(元素))
}
}
趣味调用API(参数:字符串){
body.value=param
}
您可以更改要触发api调用的
主体

解决方案2:您可以显式地执行api调用,然后将数据发布到livedata(不使用livedata builder)

liveData构建块充当协同路由和liveData之间的结构化并发原语。当LiveData变为活动状态时,代码块开始执行,当LiveData变为非活动状态时,代码块在可配置的超时后自动取消。如果在完成之前取消,则如果LiveData再次变为活动状态,则会重新启动。如果在上一次运行中成功完成,则不会重新启动。请注意,只有在自动取消时才会重新启动。如果由于任何其他原因(例如引发CancelationException)取消了该块,则不会重新启动该块

这就是你提到的第一次成功的原因

解决方案1:将liveData与

private val body:MutableLiveData=MutableLiveData()
val YgousData=body.switchMap{
实时数据{
Log.d(标记“正在运行的liveData范围…”)
val元素=withContext(Dispatchers.IO){
Jsoup.connect(“https://www.ygosu.com/community/real_article")
.get()
.选择(“分区板/包裹体tr”)
}
发射(setYgosuData(元素))
}
}
趣味调用API(参数:字符串){
body.value=param
}
您可以更改要触发api调用的
主体


解决方案2:您可以显式地执行api调用,然后将数据发布到livedata(不使用livedata builder)

您可以在调用
LoadyGosData
方法的地方显示代码吗?您可以在调用
LoadyGosData
方法的地方显示代码吗?这是我真正想要的。谢谢!这才是我真正想要的。谢谢!
fun setYgosuData(tmpDoc: Elements?) : ArrayList<YgosuData> {
    var tmpList = ArrayList<YgosuData>()
    if (tmpDoc != null) {
        //Log.d(TAG, "element : $tmpDoc")
        for (e in tmpDoc) {
            var title = e.select("td.tit a")
            var name = e.select("td.name a")
            var read = e.select("td.read")
            var date = e.select("td.date")
            var url = e.select("td.tit a").attr("href").toString()
            var tmpYgosuData = YgosuData(
                title = title.text(),
                name = name.text(),
                read = read.text(),
                date = date.text(),
                url = url
            )
            tmpList.add(tmpYgosuData)

        }


    }
    Log.d(TAG, "여기2 ${tmpList.toString()}")
    return tmpList
}
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
}