Ошибка Inappropriate blocking method call при http запросе в Kotlin
Изучаю корутины и возник вопрос. Набросал простую функцию для получения данных из сети. Но в Intelij IDEA выделяет желтым URL(url).openConnection() и выводит предупреждение "Inappropriate blocking method call"
Пробовал вызывать так
runBlocking {
getHttp("http://link.ru")
}
Ставил модификатор suspend для fun main - один фиг выделяет. В чем ошибка?
suspend fun getHttp(url: String): String {
var txt = ""
withContext(Dispatchers.IO) {
with(URL(url).openConnection() as HttpURLConnection) {
try {
txt = inputStream.bufferedReader().readText()
} catch (e:Exception) {
e.printStackTrace()
}
}
}
return txt
}
Ответы (1 шт):
Автор решения: Fox Code
→ Ссылка
Проблема в том, что Вы вызываете блокирующий HttpUrlConnection, и как правильно заметили в комментариях - вся суть использования корутин сходит на нет.
Решить данную проблему можно несколькими способами, либо использовав асинхронный клиент типа Retrofit, либо оборачивать блокирующий код в отдельный поток. По ссылке статья с подробным объяснением и решением.