【问题标题】:Kotlin: Acessing function asynchronouslyKotlin:异步访问函数
【发布时间】:2019-12-19 10:51:21
【问题描述】:

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

var content = ContentList().list(navBarTitle)

ContentList 类:

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 异步方法,但看到了它关于为它创建新函数的信息?非常感谢任何指针/建议。提前数百万谢谢...

【问题讨论】:

标签: android kotlin


【解决方案1】:

您可以使用 Kotlin coroutine。你可以试试下面的代码

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函数

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

【讨论】:

  • 从 IDE Expecting member declaration 获取错误到我的前一行:recyclerView_main.adapter = SecondAdapter(content)... 有什么想法吗?
猜你喜欢
  • 2017-07-12
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2012-03-10
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多