完成处理程序 Android Kotlin

问题描述 投票:0回答:1

如果之前有人问过这个问题,我很抱歉,我真的找不到任何不相似的东西!如果这个问题很愚蠢,我也很抱歉,我是一名 iOS 开发人员,但我对 Android 有点迷失了......

所以我正在使用 Fuel Library(https://github.com/kittinunf/Fuel) 从 API 获取 JSON 数据...在 Swift 中,有一个称为完成处理程序的东西,每当函数完成时,它就会返回它并立即运行其中的代码。这是 Swift 中的一个例子:

func hardProcessingWithString(input: String, completion: (result: String) -> Void) {
    ...
    completion("we finished!")
}

我需要做的是与 Kotlin 中的以下函数类似的操作。

fun recomendationsData() {

    Fuel.get("https://rss.itunes.apple.com/api/v1/us/apple-music/hot-tracks/10/explicit.json").response { request, response, result ->
                    println(request)
                    println(response)
                    val (bytes, error) = result
                    if (bytes != null) {
                        val str = String(bytes)
                        val obj = JSONObject(str)
                        val resultsP = obj.getJSONObject("feed")
                        val results = resultsP.getJSONArray("results")

                        for (i in 0..(results.length() - 1)) {
                            val o = results.getJSONObject(i)
                            trackName1.add(o.getString("name"))
                            trackArtist1.add(o.getString("artistName"))
                            trackImage1.add(o.getString("artworkUrl100"))
                        }


                    }
                }
}

我读过有关“回调”的内容,但我真的不明白它是如何工作的,也不明白如何实现它(任务必须异步完成)。

再次非常感谢您!

问候

android kotlin android-asynctask completionhandler
1个回答
46
投票

在这种情况下,语法类似于 swift:

fun recommendationsData(callback: (String) -> Unit) {

然后在您的函数中,您有一个名为

callback
的函数,您可以使用结果调用该函数(将
String
更改为您要返回的任何内容)。

然后将函数调用从

recommendationsData()
更改为
recommendationsData(doSomething)

recommendationsData {
    doSomethingWith(it) // or you can get named argument
    // do some more stuff
}
© www.soinside.com 2019 - 2024. All rights reserved.