Android Kotlin协程mvvm从模型返回值

Android Kotlin协程mvvm从模型返回值,android,kotlin,mvvm,coroutine,Android,Kotlin,Mvvm,Coroutine,我正在通过在Kotlin中使用协程来创建爬行逻辑,但我不知道这段代码是否正确 这是模型课 suspend fun parseYgosu() : Elements? { var data:Elements? = null var x : Deferred<Elements?> = CoroutineScope(Dispatchers.IO).async { var doc = Jsoup.connect("https://www.ygos

我正在通过在Kotlin中使用协程来创建爬行逻辑,但我不知道这段代码是否正确

这是模型课

  suspend fun parseYgosu() : Elements? {
    var data:Elements? = null

    var x : Deferred<Elements?> = CoroutineScope(Dispatchers.IO).async {
        var doc = Jsoup.connect("https://www.ygosu.com/community/real_article").get()
        data = doc.select("div.board_wrap tbody tr")
        data
    }
        x.await()
    Log.d(TAG, "$data")
    return data
}
suspend fun parseYgosu():元素?{
变量数据:元素?=null
var x:Deferred=CoroutineScope(Dispatchers.IO).async{
var doc=Jsoup.connect(“https://www.ygosu.com/community/real_article)获取()
数据=文件选择(“分区板\包裹体tr”)
数据
}
x、 等待
Log.d(标记“$data”)
返回数据
}
这段代码有问题。我不希望它是一个挂起函数。 我还想通过从repository类调用这个函数来获取数据。
你能帮我吗?

坚持推迟未来,如果你不想让它暂停,那么你就不能在它里面有
wait()

// Not suspend
fun parseYgosuAsync() = CoroutineScope(Dispatchers.IO).async {
    val doc = Jsoup.connect("https://www.ygosu.com/community/real_article").get()
    val data = doc.select("div.board_wrap tbody tr")
    Log.d(TAG, "$data")
    data
}
你可以用

fun parseYgosu():LiveData=LiveData{
val元素=withContext(Dispatchers.IO){
Jsoup.connect(“https://www.ygosu.com/community/real_article")
.get()
.选择(“分区板/包裹体tr”)
}
发射(元素)
}
和UI端:

//用于片段
viewModel.parseYgosu().observe(viewLifecycleOwner,观察者{element->…})
//还是为了活动
viewModel.parseYgosu().observe(这个,观察者{element->…})