Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 11

Загрузка текста и картинки в listView с AsyncTask

25.06.2015, 16:02. Показов 3367. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем. Имеется файл в формате JSON на удалённом сервере. Мне нужно вывести текст из определённых узлов файла и картинки по указанным в файле ссылкам.

JSON
1
2
{"success":1,"products":[{"id":"956","name":"\u041c\u044f\u0447 ","price":"29.0000","description":"","image_url":"http:\/\/..../1711.750x0.jpg"},{"id":"955","name":"\u0416\u0435\u043d\u0441\u043a\u0430\u044f \u0444\u0443\u0442\u0431\u043e\u043b\u043a\u0430 (Allianz)","price":"110.5000","description":"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b: CLIMACOOL\u00ae, 100% \u043f\u043e\u043b\u0438\u044d\u0441\u0442\u0435\u0440","image_url":"http:\/\/.../1709.750x0.jpg"},{"id":"954","name":"\u0422\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0430\u044f \u043a\u043e\u0444\u0442\u0430 15\/16","price":"91.0000","description":"
100% \u043f\u043e\u043b\u0438\u044d\u0441\u0442\u0435\u0440<\/p>","image_url":"http:\/\/.../1706.750x0.jpg"}]}
Нашёл в интеренте примеры, только вот дела все примеры делают чтото одно, либо текст, либо картинку. Попытался както допилить. Но увы познаний не хватает. Вот код:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
public class MainActivity extends Activity {
 
    // Создаем объект JSON Parser
    JSONParser jParser = new JSONParser();
 
 
    private static String url_all_products = "http://.../test.php";
    // Имена узлов JSON
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_PRODUCTS = "products";
    private static final String TAG_PID = "id";
    private static final String TAG_NAME = "name";
    private static final String TAG_IMAGE = "image_url";
    // массив товаров JSONArray
    JSONArray products = null;
 
 
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
// Загружаем товары в другом потоке
        new LoadAllProductsTask().execute();
 
 
        ArrayList<ListItem> listData = getListData();
 
        final ListView listView = (ListView) findViewById(R.id.custom_list);
        listView.setAdapter(new CustomListAdapter(this, listData));
        listView.setOnItemClickListener(new OnItemClickListener() {
 
            @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                ListItem newsData = (ListItem) listView.getItemAtPosition(position);
                Toast.makeText(MainActivity.this, "Selected :" + " " + newsData, Toast.LENGTH_LONG).show();
            }
        });
    }
 
    private ArrayList<ListItem> getListData() {
        ArrayList<ListItem> listMockData = new ArrayList<ListItem>();
 
 
        String[] images = getResources().getStringArray(R.array.images_array);
        String[] headlines = getResources().getStringArray(R.array.headline_array);
 
        for (int i = 0; i < images.length; i++) {
            ListItem newsData = new ListItem();
            newsData.setUrl(images[i]);
            newsData.setHeadline(headlines[i]);
            newsData.setReporterName("Папарацци");
            newsData.setDate("May 26, 2013, 13:35");
            listMockData.add(newsData);
        }
        return listMockData;
    }
 
 
    // Задача в другом потоке для загрузки всех товаров через HTTP Request
    class LoadAllProductsTask extends AsyncTask<String, String, String> {
 
 
 
        // получим все товары через url
        protected String doInBackground(String... args) {
            // Строим параметры
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            // получим строку JSON из URL
            JSONObject json = jParser.makeHttpRequest(url_all_products, "GET",
                    params);
 
            // Check your log cat for JSON reponse
            //Log.d("All Products: ", json.toString());
 
            try {
                // Проверяем переменную SUCCESS TAG
                int success = json.getInt(TAG_SUCCESS);
 
                if (success == 1) {
                    // товар найден
                    // получаем массив товаров
                    products = json.getJSONArray(TAG_PRODUCTS);
 
                    // проходим в цикле через все товары
                    for (int i = 0; i < products.length(); i++) {
                        JSONObject c = products.getJSONObject(i);
 
 
 
 
 
 
                        Log.d("Продукт ID: ", c.getString(TAG_PID));
 
 
                    }
 
                } else {
                    // ничего не найдено
 
 
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
            return null;
        }
 
 
    }
 
 
}
как мне получить данные внутри getListData() из LoadAllProductsTask? Если кому не трудно допишите или исправте код. Ничего не получается. В гугл не посылайте несколько дней рыл, и примера так и не нашёл.
Лог выводит как положено ID продуктов.
Пример вывода листа берёт ссылки на картинки и тексты из двух array в файле strings.xml, а мне надо из удалённого json файла.

Добавлено через 22 часа 38 минут
Я так понимаю, что либо я чушь написал, либо уже есть решение, но никто подсказать не хочет. Хоть бы ткнули носом где есть пример или сказали бы что совсем не в ту степь меня вообще понесло.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.06.2015, 16:02
Ответы с готовыми решениями:

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

Загрузка текста в ListView: как убрать диалог выбора файла
Есть код: OpenFileDialog1.Filter = &quot;Text files (*.txt)|*.txt&quot; OpenFileDialog1.InitialDirectory =...

Свой listview с AsyncTask
Подскажите, что не так делаю. При запуске приложения listview просто не отображается. Переменные все прошелся дебагером, значения...

8
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
25.06.2015, 16:10
Во-первых много кода, копаться в нем желания не возникает.

Цитата Сообщение от Hmmer Посмотреть сообщение
Мне нужно вывести текст из определённых узлов файла и картинки по указанным в файле ссылкам.
Корабли бороздят просторы большого театра.
Я, к примеру, вообще не понял о чем речь.

Задачу надо бы поделить на несколько более мелких и решать их по-порядку.
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 11
25.06.2015, 16:22  [ТС]
Попытаюсь ещё раз объяснить. Есть фаил в формате json, в котором выведены товары. Указаны в нём описание товара и ссылки на картинки. Вот нужно это всё упаковать в список. Список уже готов, только вот данные в примере который я опубликовал берутся из файла strings.xml, который находится по идее внутри приложения, а мне нужно данные из файла json который лежит на удалённом сервере. Так вот чтобы каждый раз не обновлять strings.xml, проще из магазина экспортировать по запросу json. При количестве товаров более 800 наименований сами понимаете, удобнее тянуть с сервера.
По крайней мере я так считаю.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
25.06.2015, 17:25
Hmmer, честно говоря, тоже лень копаться в коде. JSON, если не ошибаюсь, разрешает передачу не только текста, но и картинок. Соответственно, изучаете его структуру, распознаёте JSON, создаёте строку ListView, кладёте в ImageView рисунок.
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
25.06.2015, 18:19
JSON, по моему, всё таки текстовый формат и передавать изображения с его помощью нельзя. Можно передать ссылку на изображение.

Hmmer, я так понял ты не знаешь как достать информацию из метода doInBackground.
Нужно поступить примерно так :
Создай объект который будет передаваться как результат из метода doInBackground. Допустим MyResult(это может быть список или массив или любой другой объект). Класс LoadAllProductsTask будет выглядеть примерно так:

Java
1
2
3
4
5
6
7
    class LoadAllProductsTask extends AsyncTask<"тип входных данных", String, MyResult> {
 
        protected MyResult doInBackground("тип входных данных"... args) {
            // получим все товары через url и записываем в объект MyResult
            return MyResult;
        }
    }
А вместо
Java
1
new LoadAllProductsTask().execute();
Нужно написать что-то на подобии:

Java
1
2
3
        LoadAllProductsTask allProductsTask = new LoadAllProductsTask();
        allProductsTask.execute("тип входных данных" arg);// "тип входных данных" - это может быть String или любой другой тип
        MyResult myResult = allProductsTask.get();
Подробнее про AsyncTask почитай тут. Там 6 уроков. Всё доступным языком рассказано.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
25.06.2015, 19:30
Mikalai, спору нет, ссылку передавать через JSON можно. Но, вроде как, некоторые выкручиваются, создают какие-то хитрости. Может быть, зависит от конкретного сервера (как настроишь, так и будет).
http://stackoverflow.com/quest... ase64?lq=1 (дискуссия идёт до сих пор).
http://stackoverflow.com/quest... son-object

Добавлено через 6 минут
Хотя, ТС ещё рано. В его JSON нет таких данных (сначала думал, что есть). Так что моё предложение отменяется.
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
25.06.2015, 19:42
CoolMind, как я понял идея заключается в интерпретировании массива байт(картинки) как текста. В итоге получится что-то типо:

3F33ё3с4+4e4ћ4Ш55M5‡5В5э676r6®6й7$7`7њ 7Ч88P8Њ8И99B99ј9щ:6:t:І:п;-;k;Є;и<'<e<¤<г="=a=Ў=а> >`>*>а?!?a?ў?в@#@d@¦@зA)AjA¬AоB0BrBµBчC: C}CАDDGDЉDОEEUEљEЮF"FgF«FрG5G{GАHHKH‘ HЧIIcI©IрJ7J}JДK KSKљKвL*LrLєMMJM“MЬN%NnN·O....

а на другом конце обратная операция. Это как сковородкой яму копать. Извращение в чистом виде
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
25.06.2015, 20:16
Mikalai, это один из вариантов, вы можете его не использовать, но это лучше, чем ничего. Вы же помните, как передаются картинки в почтовых программах? Точно так же кодируются через Base64 (или по-другому, я уже подзабыл). И всё нормально.

Добавлено через 56 секунд
Кстати, а как вы сформировали такую строку?
0
266 / 242 / 96
Регистрация: 11.01.2015
Сообщений: 673
25.06.2015, 20:35
CoolMind, открыл бинарный файл блокнотом )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.06.2015, 20:35
Помогаю со студенческими работами здесь

Заполнение ListView в AsyncTask
Нужно заполнить ListView картинками, которые скачиваются в AsyncTask с помощью Picasso. Картинки скачиваются нормально, ArrayList и...

Как из AsyncTask Добавить элементы в ListView
В общем сабж. Используя адаптер как сделать?

Порционная загрузка с AsyncTask и бесконечный скролл
Есть большой JSON с текстом и картинками. С помощью AsyncTask я гружу все данные, но возникла необходимость их грузить порционно,...

Загрузка информации через AsyncTask и возврат ее в mainactivity
Здравствуйте. Задача вроде проста, а ничего не получается) мне необходим класс, который по указанной ссылке будет загружать json и...

Загрузка картинки (имя картинки заносится в базу, но на сервер она не закачивается)
Добрый вечер! Друзья выручайте... Набросал код (кое что взял с Интернета) для загрузки картинок: &lt;?php if (isset($_FILES)) { ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru