Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
#1

Загрузка информации через AsyncTask и возврат ее в mainactivity - Программирование Android

26.01.2017, 19:23. Просмотров 159. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Задача вроде проста, а ничего не получается) мне необходим класс, который по указанной ссылке будет загружать json и возвращать как строку в главную активити. А на основе полученного JSON в главной активити будет происходить разбор и заполнение данных.
Класс для загрузки JSON как строки:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class JSONLoader extends AsyncTask<String, Void, String> {
    private static final String ROOT_URL = "ссылка на страницу с JSON";
 
    @Override
    protected String doInBackground(String... apis) {
        StringBuilder result = new StringBuilder();
        StringBuilder newUrl = new StringBuilder();
        newUrl.append(ROOT_URL).append(apis[0]);
 
        HttpURLConnection urlConnection = null;
        try {
            URL url = new URL(newUrl.toString());
            urlConnection = (HttpURLConnection) url.openConnection();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream()));
 
            String temp = null;
            while ((temp = reader.readLine()) != null) {
                result.append(temp);
            }
        } catch (MalformedURLException e) {
            Log.e("UTException", e.toString());
        } catch (IOException e) {
            Log.e("UTException", e.toString());
        } finally {
            urlConnection.disconnect();
        }
        return result.toString();
    }
}
В главной активити при вызове ошибка Error54, 49) error: non-static method get() cannot be referenced from a static context
where Result is a type-variable:
Result extends Object declared in class AsyncTask
Java
1
2
3
4
5
6
7
JSONArray ja =  new JSONArray(JSONLoader.get()); // ошибка тут
        rowItems = new ArrayList<RowItem>();
        for (int i = 0; i < ja.length(); i++) {
JSONObject jsonobject = ja.getJSONObject(i);
            RowItem item = new RowItem(jsonobject.getInt("id")....);
            rowItems.add(item);
        }
Подскажите как исправить данную ошибку. Пробовал объявить как static jsonloader, но компилятор не позволяет, пишет static not allowed here.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2017, 19:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Загрузка информации через AsyncTask и возврат ее в mainactivity (Программирование Android):

MainActivity AsyncTask - Программирование Android
Добрый вечер. Ребята тут небольшая проблема. Мне нужно Заполнить NavigatorDrawer (из базы). Почему когда я пытаюсь в...

Загрузка ListView после AsyncTask - Программирование Android
В классе, который расшияет AsyncTask, занружаю данные из JSON и сохраняю в бд. При первом запуске апликации, список не выдаёт какого либо...

Загрузка текста и картинки в listView с AsyncTask - Программирование Android
Привет всем. Имеется файл в формате JSON на удалённом сервере. Мне нужно вывести текст из определённых узлов файла и картинки по указанным...

Написать поток через класса AsyncTask - Программирование Android
Доброй ночи. Есть поток, кусок кода (смотрите ниже) , который нужно переделать через класса AsyncTask. Не могу понять как вывести...

Загрузка сохраненной информации - Программирование Android
Доброго времени суток. Подскажите пожалуйста, как можно организовать единоразовую загрузку ранее сохраненной информаци в...

Добавить к программе след действия: Сохранение и загрузка информации в текст. файл. Сохранение и загрузка информации в типизированный файл. - Pascal
Помогите добавить к программе след действия: Сохранение и загрузка информации в текст. файл. Сохранение и загрузка информации в...

6
Pablito
2545 / 2027 / 631
Регистрация: 12.05.2014
Сообщений: 7,141
Завершенные тесты: 1
26.01.2017, 19:29 #2
для начала надо создать где-то в активити экземпляр этого JSONLoader
и вызвать на нем метод execute

когда асинтаск отработает - он должен вызвать в активити какой-то метод и передать туда данные

Java
1
JSONLoader.get()
так делать неправильно и неверное по многим причинам
1
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
26.01.2017, 19:51  [ТС] #3
Глупая ошибка забыть инициализировать объект класса, к методу которому обращаешься. Пожалуй стоит отдохнуть)
Уточните на счет JSONLoader.get(), неправильно если к классу без инициализации обращаться? или подход в целом неверный, в случае второго расскажи как лучше стоит сделать, спасибо.
0
Pablito
2545 / 2027 / 631
Регистрация: 12.05.2014
Сообщений: 7,141
Завершенные тесты: 1
26.01.2017, 19:56 #4
и первое и второе, неверный потому что вызов get() блокирует поток пока не вернется результат
теряется весь смысл асинхронности
0
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
26.01.2017, 20:08  [ТС] #5
Разве если не блокировать поток, то в момент инициализации в мейн активити я не передам адаптеру списка пустые значения?
В таком случае мне нужно заполнять адаптер списка в самом классе JSONLoader в методе onPostExecute()?
0
Pablito
2545 / 2027 / 631
Регистрация: 12.05.2014
Сообщений: 7,141
Завершенные тесты: 1
26.01.2017, 20:10 #6
передашь конечно, поэтому я и писал - лучше строить все так что когда отработает асинктаск, он должен сам вызвать какой-то метод и передать данные, а уже потом можно обновить адаптер
1
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 178
26.01.2017, 20:18  [ТС] #7
Все понял, спасибо.
0
26.01.2017, 20:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2017, 20:18
Привет! Вот еще темы с ответами:

Возврат из Heap через dll - FASM
Добрый день, добрые ребятки. Уже целый день на работе бьюсь над проблемой, может подскажите. Есть DLL на FASM, которую цепляю к проекту на...

Возврат char* через return - C++
Вот написал маленький пример, того с чем не могу разобраться в большой программе: char *filename; FILE *fd; ...

Возврат значения метода через указатель - C++
Здраствуйте, помогите зделать что бы возврат результатов с метода решения уравнения возвращался через указатель. #include &lt;iostream&gt; ...

Возврат значения через параметр функции - C++
Пишу функцию,которая должна создавать динамическую матрицу,а затем возвращать ее через параметр. Правильно ли я понимаю,что для этого надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.