完成处理程序 Android Kotlin

21

如果这个问题之前已经被询问过了,我很抱歉,但是我真的找不到任何相似的内容!如果这个问题很傻,我也很抱歉,因为我是一名iOS开发者,在Android方面有点迷茫...

所以我正在使用Fuel库(https://github.com/kittinunf/Fuel)来从API获取JSON数据...在Swift中,有一个叫做completion handler的东西,每当函数完成时,它就会立即返回并运行其中的代码。这是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"))
                        }


                    }
                }
}

我读到了关于"回调函数(callback)"的东西,但我真的不明白它是如何工作的,也不知道如何实现它(任务必须异步完成)。

再次非常感谢!

敬礼

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
}

3
传奇!干杯,伙计! - Brandon Stillitano
推荐数据 { 对它做些事情 }和推荐数据(回调 = {it 做一些事情(it) }) 之间有什么区别吗? - Dinu Nicolae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接