2017-08-30 3 views
0

Es tut mir leid, wenn diese Frage zuvor gestellt wurde, ich konnte wirklich nichts finden, nicht einmal simillar! Es tut mir auch leid, wenn die Frage dumm ist, ich bin ein iOS-Entwickler und ich bin ein bisschen hier in Android verloren ...Completion Handler Android Kotlin

So verwende ich Fuel Library (https://github.com/kittinunf/Fuel), um JSON-Daten von einem abzurufen API ... In Swift gibt es etwas, das als Vervollständigungs-Handler bezeichnet wird. Wenn die Funktion beendet ist, wird sie zurückgegeben und der darin enthaltene Code sofort ausgeführt. Dies ist ein Beispiel davon in Swift:

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

Was ich brauche, ist etwas ähnliches mit dieser folgenden Funktion zu tun, die ich in Kotlin habe.

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")) 
         } 


        } 
       } 
} 

Ich habe gelesen, über etwas „Rückruf“, aber ich wirklich verstehe nicht, wie es funktioniert, noch wie es zu implementieren (Die Aufgabe Asynchron getan werden muss).

Vielen Dank nochmal!

Grüße

Antwort

0

In diesem Fall wird die Syntax ist ähnlich wie swift:

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

Dann in Ihrer Funktion haben Sie eine Funktion callback genannt, die Sie mit dem Ergebnis aufrufen können (ändern String, was auch immer Sie‘ wiederkehren).

dann Ihren Funktionsaufruf entweder ändern von recommendationsData()recommendationsData(doSomething) oder

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

Wow! Ich danke dir sehr!!! Einwandfrei gearbeitet !!! Danke nochmal –

Verwandte Themen