Как получить значение из Kotlin AsyncTask - PullRequest
0 голосов
/ 11 января 2020

Я не могу найти одно решение для этого. Я искал много вещей, и я не могу получить ответ. Пожалуйста, помогите мне. Это мой код

class NewTask : AsyncTask<Void, Void, String>() {
public override fun doInBackground(vararg params: Void?): String? {
    val arr = ArrayList<String>()
    val url = URL("http://boogle.org")

    with(url.openConnection() as HttpURLConnection) {
        requestMethod = "GET"  // optional default is GET

        //arr.add(responseCode)

        inputStream.bufferedReader().use {
            it.lines().forEach { line ->
                //println(line)
                arr.add(line as String)
            }
        }
    }
    return arr.get(0)
}

public override fun onPostExecute(result: String?) {
    //super.onPostExecute(result)

}
}

Ответы [ 2 ]

1 голос
/ 11 января 2020

Вы можете вызвать метод get () AsyncTask (или перегруженный метод get (long, TimeUnit)). Этот метод будет блокироваться до тех пор, пока AsyncTask не завершит свою работу, после чего он вернет вам Результат.

Было бы разумно выполнить другую работу между созданием / началом вашей асинхронной задачи c и вызов метода get, в противном случае вы не очень эффективно используете задачу asyn c.

0 голосов
/ 13 января 2020

У меня была такая же проблема, но я остановился на сопрограммах. Вот код, который я использовал:

class CoRoutine{
suspend fun httpGet(url: String = "https://boogle.org): String {
val arr = ArrayList<String>()
withContext(Dispatchers.IO) {
    val url = URL(url)

    with(url.openConnection() as HttpURLConnection) {
        requestMethod = "GET"  // optional default is GET

        //arr.add(responseCode)

        inputStream.bufferedReader().use {
            it.lines().forEach { line ->
                //println(line)
                arr.add(line as String)
            }
        }
    }
}
return arr.get(0)
}
}

Ответ взят из мой другой ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...