How Can I Use Coroutines With Volley So That My Code Can Be Written Like Sychronous?
Here's an example from developer.android.com class MainActivity : AppCompatActivity() { lateinit var textView:TextView lateinit var button:Button override fun onCreate(savedInsta
Solution 1:
You can use suspendCoroutine
, see https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/suspend-coroutine.html
suspendfungetData() = suspendCoroutine<String> { cont ->
val queue = Volley.newRequestQueue(this)
val url = "http://www.google.com/"val stringRequest = StringRequest(Request.Method.GET, url,
Response.Listener<String> { response ->
cont.resume("Response is: ${response.substring(0, 500)}")
},
Response.ErrorListener { cont.resume("Something went wrong!") })
queue.add(stringRequest)
}
You should implement your activity like described here: https://github.com/Kotlin/kotlinx.coroutines/blob/master/ui/coroutines-guide-ui.md#structured-concurrency-lifecycle-and-coroutine-parent-child-hierarchy
classMainActivity: AppCompatActivity(), CoroutineScope {
protectedlateinitvar job: Job
overrideval coroutineContext: CoroutineContext
get() = job + Dispatchers.Main
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
job = Job()
...
button.setOnClickListener({
launch {
valdata = getData()
textView.text = data
}
})
}
overridefunonDestroy() {
super.onDestroy()
job.cancel()
}
}
Post a Comment for "How Can I Use Coroutines With Volley So That My Code Can Be Written Like Sychronous?"