完成处理程序Android Kotlin

Cri*_*uyo 8 android android-asynctask kotlin

对不起,如果先前已经问过这个问题,我真的找不到任何甚至不能同样的东西!我很抱歉,如果问题是愚蠢的,我是一名iOS开发者,我在Android中有点迷失...

所以我使用Fuel Library(https://github.com/kittinunf/Fuel)来从API中获取JSON数据......在Swift中有一个叫做完成处理程序的东西,无论何时函数完成,它都会返回它并且立即运行其中的代码.这是Swift中的一个例子:

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

我需要做的是用我在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"))
                        }


                    }
                }
}
Run Code Online (Sandbox Code Playgroud)

我读过一些叫做"回调"的东西,但我真的不明白它是如何工作的,也不知道如何实现它(任务必须是异步完成的).

再一次非常感谢你!

问候

Bre*_*tty 19

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

fun recommendationsData(callback: (String) -> Unit) {
Run Code Online (Sandbox Code Playgroud)

然后在你的函数中你有一个调用的函数callback,你可以用结果调用(改为String你要返回的任何东西).

然后将函数调用从或更改recommendationsData()recommendationsData(doSomething)

recommendationsData {
    doSomethingWith(it) // or you can get named argument
    // do some more stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 传奇!队友的欢呼声! (2认同)