Search code examples
androidjsonkotlinreturnandroid-volley

return value from volley response


Before in other random languages I always returned values from functions and I was so surprised now when I try do like below but got error:

fun getChannels(): List<TblChannel> {
        val stringRequest = JsonObjectRequest(
            Request.Method.GET, "$baseUrl/api/json/channel_list.json",
            null,
            { response ->
                try{
                    val gson = Gson()
                    val token = TypeToken.getParameterized(ArrayList::class.java,TblChannel::class.java).type
                    val channels1:JSONArray = response.getJSONArray("groups").getJSONObject(0).getJSONArray("channels")

                    //got "return isn't allowed here" error
                    return gson.fromJson(channels1.toString(),token)
                } catch (e:Exception){
                    Log.e(tag,"DkPrintError on getChannels: $e")
                }

            },
            { error ->
                Log.e(tag, "DkPrintError on getChannels: $error")
            })


        requestQueue.add(stringRequest)
    }

How can I convert response body to my class and return them?


Solution

  • This isn't really a kotlin problem, we do have functions that return values, however you cannot return a value from asynch function (which is the case here):

    If you perform some calculation asynchronously, you cannot directly return the value, since you don't know if the calculation is finished yet. You could wait it to be finished, but that would make the function synchronous again. Instead, you should work with callbacks

    source

    what you could do tho (as suggested in the quote), is use callbacks, as shown here