【问题标题】:Completion Handler Android Kotlin完成处理程序 Android Kotlin
【发布时间】:2017-08-30 17:03:40
【问题描述】:

很抱歉,如果以前有人问过这个问题,我真的找不到任何不相似的东西!如果问题很愚蠢,我也很抱歉,我是一名 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 android-asynctask kotlin


    【解决方案1】:

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

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

    然后在您的函数中,您有一个名为 callback 的函数,您可以使用结果调用它(将 String 更改为您要返回的任何内容)。

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

    recommendationsData {
        doSomethingWith(it) // or you can get named argument
        // do some more stuff
    }
    

    【讨论】:

    • 传奇!干杯伙伴!
    • 是否有区别:recommensData { doSomethingWith(it) } 和 RecommendationData(callback = {it doSmth(it) })
    猜你喜欢
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多