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

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

25.06.2015, 16:02. Показов 3396. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru