AsyncTask требует вечности для получения результата

Я делаю приложение для Android, в котором мне нужно получать данные из онлайн-базы данных. В онлайн-базе данных есть 3 столбца: Дата, время и Varchar(255).

Вот мой PHP-код:

<?php
require "connection.php";
if($result = mysqli_query($conn, "select * from `xuberance_updates`")) {
while($row = mysqli_fetch_assoc($result)) {
    echo $row["date"].",".$row["time"].",".$row["updates"].";";
}
}
?>

А вот мой код котлина в андроиде:

class RefreshTask(private val alertDialog: AlertDialog) :
    AsyncTask<String, Void, String>() {

    override fun onPreExecute() {
        ...
        alertDialog.show()
        ...
    }

    override fun doInBackground(vararg params: String?): String? {
        val url = URL("https://.../show_update.php")
        val httpURLConnection = url.openConnection() as HttpURLConnection
        httpURLConnection.doInput = true
        httpURLConnection.doOutput = true
        httpURLConnection.requestMethod = "POST"
        httpURLConnection.connect()
        val reader = BufferedReader(InputStreamReader(httpURLConnection.inputStream, "UTF-8"))
        var line = reader.readLine()
        val result = StringBuilder()
        while (line != null) {
            result.append(line)
            line = reader.readLine()
        }
        reader.close()
        httpURLConnection.disconnect()
        return result.toString()
    }

    override fun onPostExecute(result: String?) {
        alertDialog.dismiss()
        ...
    }
    ...
}

Когда я запускаю AsyncTask, появляется диалоговое окно. Но от этого никогда не отказываются. Метод onPostExecute(result: String?) никогда не достигается. Как это исправить?

Изменить: иногда он успешно достигает метода onPostExecute(result: String?). Но в большинстве случаев мне нужно ждать 2 или более минут, чтобы добраться до этого метода.


person Nishant Jalan    schedule 18.06.2019    source источник
comment
возможно, потому что данные, которые вы получаете, слишком велики   -  person akshay_shahane    schedule 18.06.2019
comment
База пока пуста. Даже тогда моя проблема остается. Я попробовал это, используя свой Wi-Fi и мобильные данные (что очень быстро), но безрезультатно.   -  person Nishant Jalan    schedule 18.06.2019


Ответы (2)


Используйте эту библиотеку для совершения сетевых вызовов. Очень просто, но эффективно. http://loopj.com/android-async-http/

person Haseeb Khan    schedule 21.06.2019

это должно быть виновником

 while (line != null) {
            result.append(line)
            line = reader.readLine()
        }
person akshay_shahane    schedule 18.06.2019
comment
Я попытался удалить эту строку. Моя проблема все еще остается - person Nishant Jalan; 18.06.2019
comment
удалить нулевую проверку безопасности в пост-выполнении ...... может быть, поэтому при пост-выполнении не вызывается - person akshay_shahane; 18.06.2019
comment
В методе после выполнения нет нулевой проверки безопасности. Как нулевая проверка безопасности повлияет на вызов метода отклонения()? - person Nishant Jalan; 18.06.2019