Skip to content Skip to sidebar Skip to footer

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?"