Не удается вернуть тело запроса http - PullRequest
0 голосов
/ 18 апреля 2020

Итак, я пытаюсь вернуть тело, которое я получаю в OnResponse (). В отладчике я вижу, что тело извлекается, но не присваивается результату, а handleHttpRequest () возвращает ""? Единственный способ, которым я могу отправить тело String в parseJsonToObject (), это вызвать его в onResponse, который я не хочу, потому что я хочу использовать handleHttpRequest () для других JSON запросов. Что я хочу сделать, это вернуть тело в handleHttpRequest и вызвать parseJsonToObject () в doInBackground ().

Мой главный вопрос: почему тело не присваивается результату?

внутренний класс AsyncTaskHandle Json: AsyncTask () {

    override fun doInBackground(vararg url: String?): String? {

        handleHttpRequest()

        return "";
    }

    private fun handleHttpRequest(): String? {
        val url = "https://www.noforeignland.com/home/api/v1/places/";
        val client = OkHttpClient();
        var result: String? = "";
        val request = Request.Builder().url(url).build();

       client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                println(e)
            }
            override fun onResponse(call: Call, response: Response) {
                val body = response?.body?.string();
                result = body;
                parseJsonToObjct(body)

            }
        })

        return result
    }


}

1 Ответ

0 голосов
/ 18 апреля 2020

Я нашел решение. Проблема в том, что client.newCall (request) .enqueue является асинхронным и handleHttpRequest () возвращается до того, как тело будет присвоено результату. Я решил это с помощью insted client.newCall (запрос) .execute ().

fun handleHttpRequest(url : String): String? {
        val client = OkHttpClient();
        var result: String? = "";
        val request = Request.Builder().url(url).build();

        val response = client.newCall(request).execute();
        if(response.isSuccessful){
            result = response?.body?.string();
        }else{
            println("HTTP Request FAILED")
        }
        return result
} 
...