@Boldy

Как получить json через async task в android?

Суть: нужно получить json из url. Android Studio жалуется, что .execute() возвращает не String, а AsyncTask. Не понимаю, что я делаю не так.

public class DataReceiver {
    public static String readUrl(String urlString) throws IOException {
        String result = (new RetrieveJsonTask()).execute(urlString);
    }


    class RetrieveJsonTask extends AsyncTask<String, Void, String> {

        protected String doInBackground(String... urls) {
            try {
                BufferedReader reader;
                URL url = new URL(urls[0]);

                reader = new BufferedReader(new InputStreamReader(url.openStream()));
                StringBuilder buffer = new StringBuilder();
                int read;
                char[] chars = new char[1024];
                while ((read = reader.read(chars)) != -1) {
                    buffer.append(chars, 0, read);
                }
                return buffer.toString();
            } catch (Exception e) { e.printStackTrace(); }
            return null;
        }
    }
}
  • Вопрос задан
  • 883 просмотра
Решения вопроса 1
konstantin_berkow
@konstantin_berkow
Начинающий разработчик
Ну потому что execute дейтствительно возврщает AsyncTask а не String. Передайте в констурктор вашего AsyncTask'a какой-то объект которому можно всунуть результат в методе onPostExecute, ну и сделайте класс task'a статическим, зачем ему неявная ссылка на DataReceiver?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Ewintory
@Ewintory
Java / Android developer
По профилю вроде бы не новичек, а такие вопросы задаете. Можно же самому посмотреть, что возвращает execute(). А вообще, бросайте эту затею и подключайте Retrofit
Ответ написан
VYakushev
@VYakushev
Разработчик Android в Nowtaxi
Суть AsyncTask в том, что вы запускаете какой-то процесс фоном и не дожидаетесь ответа. А значит, execute() не задерживает выполнение вашего кода и продолжает работать в отдельном потоке. После того, как задача в AsyncTask будет выполнена, результат как уже писали выше, передаётся в метод onPostExecute(). Именно там вы должны получить результат и решить что с ним делать.
И не торопитесь использовать сторонние библиотеки, успеете ещё. Постарайтесь понять как работают базовые возможности Android.
Ответ написан
Комментировать
@belozerow
У asynctask есть onPostExecute, туда будет возвращен json

А вообще, я вам сэкономлю кучу времени - посмотрите в сторону retrofit
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы