Kotlin:异步访问功能 [英] Kotlin: Acessing function asynchronously

查看:221
本文介绍了Kotlin:异步访问功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我访问了一个为RecyclerView返回数组的函数.如何加载异步数组? 我这样加载函数:

I accessed a function that returns array for my RecyclerView. How do i load the array async? I load the function as such:

var content = ContentList().list(navBarTitle)

ContentList类:

ContentList class:

class ContentList {

    fun list(title : String):Array<Array<Int>>
    {
        var contentTitle : Array<Array<Int>>
        if (title == "Hijaiyyah Letters")
            contentTitle = arrayOf(
                arrayOf(R.drawable.ic_intro1_1, R.raw.ahem_x),
                arrayOf(R.drawable.ic_intro1_2, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_intro1_3, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_intro1_4, R.raw.bloop_x),
                arrayOf(R.drawable.ic_intro1_5, R.raw.blurp_x),
                arrayOf(R.drawable.ic_intro1_6, R.raw.blurp_x),
                arrayOf(R.drawable.ic_intro1_7, R.raw.ahem_x),
                arrayOf(R.drawable.ic_intro1_8, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_intro1_9, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_intro1_10, R.raw.bloop_x),
                arrayOf(R.drawable.ic_intro1_11, R.raw.ahem_x),
                arrayOf(R.drawable.ic_intro1_12, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_intro1_13, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_intro1_14, R.raw.bloop_x),
                arrayOf(R.drawable.ic_intro1_15, R.raw.blurp_x),
                arrayOf(R.drawable.ic_intro1_16, R.raw.ahem_x),
                arrayOf(R.drawable.ic_intro1_17, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_intro1_18, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_intro1_19, R.raw.bloop_x),
                arrayOf(R.drawable.ic_intro1_20, R.raw.blurp_x),
                arrayOf(R.drawable.ic_intro1_21, R.raw.bloop_x),
                arrayOf(R.drawable.ic_intro1_22, R.raw.ahem_x),
                arrayOf(R.drawable.ic_intro1_23, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_intro1_24, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_intro1_25, R.raw.bloop_x),
                arrayOf(R.drawable.ic_intro1_26, R.raw.blurp_x),
                arrayOf(R.drawable.ic_intro1_27, R.raw.ahem_x),
                arrayOf(R.drawable.ic_intro1_28, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_intro1_29, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_intro1_30, R.raw.bloop_x),
                arrayOf(R.drawable.ic_intro1_31, R.raw.blurp_x)
            )
        else if(title == "Fat-hah Vowel 1")
            contentTitle = arrayOf(
                arrayOf(R.drawable.ic_fathah1_1, R.raw.ahem_x),
                arrayOf(R.drawable.ic_fathah1_2, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_fathah1_3, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_fathah1_4, R.raw.bloop_x),
                arrayOf(R.drawable.ic_fathah1_5, R.raw.blurp_x)
            )
        else
            contentTitle = arrayOf(
                arrayOf(R.drawable.ic_tbr, R.raw.ahem_x),
                arrayOf(R.drawable.ic_tbr, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_tbr, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_tbr, R.raw.bloop_x),
                arrayOf(R.drawable.ic_tbr, R.raw.blurp_x)
            )
        return contentTitle
    }
}

我还有很多要填充数组,但是应用程序已经落后了,所以我正在考虑异步方法.我用谷歌搜索了Kotlin异步方法,但看到了有关为其创建新函数的信息吗?非常感谢任何指针/建议.提前数百万个thanx ...

I still have lots more to populate the array but already the app is lagging so i i am thinking of async approach. I googled for Kotlin async methods but saw its about creating new function for it? Any pointers/advise is very much appreciated. Millions of thanx in advance...

推荐答案

您可以使用Kotlin coroutine.您可以尝试以下代码

You can use Kotlin coroutine. You can try below code

CoroutineScope(Dispatchers.Main).launch {
    val content = async(Dispatchers.IO) {
        ContentList().list(navBarTitle)
    }
    // result will have returned value of `list()` function
    var result = content.await() 
   }
}

因为,我们正在从协程访问list(),它必须是suspend函数

As, we are accessing list() from coroutine, it needs to be suspend function

suspend fun list(title : String): Array<Array<Int>> { }

这篇关于Kotlin:异步访问功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆