Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
5 / 5 / 1
Регистрация: 04.02.2016
Сообщений: 78

Parser XML + RecyclerView + Fragments

28.08.2016, 22:54. Показов 835. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
3 вопроса.

Вопрос по XML парсингу. Подскажите как сделать выборку парсера по номеру <categoryId>6</categoryId>? (парсится отсюда http://ufa.farfor.ru/getyml/?key=ukAXxeJYZN)

Вопрос по RecyclerView. Подскажите почему, когда заходишь в категорию "Супы" показывает одинаковый элемент, а не разные?

Вопрос по фрагментам. И почему при входе в категорию под индексом "0" (Салаты). Он открывает супы а потом салаты). Не могу понять.

2 дня бьюсь. Подскажите люди добрые!

Вот проект! https://github.com/PhantomRec/OnlineShopProject
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.08.2016, 22:54
Ответы с готовыми решениями:

Пример fragments and RecyclerView
может кто-то показать пример проекта как на фото, с 2 активити, и 2 фрагментами, слева список RecyclerView а справа какая-то инфа, при...

Drawer Menu + ViewPager: Что лучше - Activity -> Fragments или Fragment -> Fragments
Я новичок в Android. Пишу приложение, в котором: Drawer Меню - в нем (например) пункт 1 - Расчет массы - при выборе этого пункта...

RecyclerView с картинками или xml разметка что лучше?
У меня есть 2 вопроса, может вам они покажутся глупыми, но я в этом пока что не очень разбираюсь: 1) RecyclerView отображает список...

4
29.08.2016, 11:25

Не по теме:

смахивает на "напишите за меня тестовое задание"

0
5 / 5 / 1
Регистрация: 04.02.2016
Сообщений: 78
30.08.2016, 14:52  [ТС]
Хм. Если вы смотрели проект. То там готово 8-9 их 10. Есть нерешенные вопросы, я ищу ответы и так. Но может и здесь кто, что подскажет.

Добавлено через 21 час 54 минуты
Итак. Вопрос по фрагментам решен. Там глупая ошибка.

По RV. Выяснил что приходит список из нужного размера, но с одинаковыми элементами. Почему-то во время парсинга парсит разные значения, но добавляет в итоге одинаковое последнее. Это странно. Разбираюсь.

Может кто глянет?

А может это связано и с ошибкой PARSER'а, т.к. в прошлый раз им парсил <item> и всё было ок, а сейчас тег <offer id ="222">, а не просто <offer>. И выдает Exception name expected position:START_TAG <n.length

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

Жду ответа по одинаковым элементам. Закоммитил новую версию.

Добавлено через 1 минуту
Код парсера:
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
    public void parse(String xml) {
        try {
            XmlPullParser parser = prepareXpp(xml);
            Boolean isSiteMeta = true;
            String tagValue = null;
            postLists.clear();
            PostList posts = new PostList();
            while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
                switch (parser.getEventType()) {
                    case XmlPullParser.START_TAG:
                        if (parser.getName().equalsIgnoreCase("offer")) {
                            isSiteMeta = false;
                        }
                        break;
                    case XmlPullParser.TEXT:
                        tagValue = parser.getText();
                    default:
                        break;
                    case XmlPullParser.END_TAG:
                        if (!isSiteMeta) {
                            if (parser.getName().equalsIgnoreCase("name")) {
                                posts.setName(tagValue);
                            } else if (parser.getName().equalsIgnoreCase("picture")) {
                                posts.setImageUrl(tagValue);
                            } else if (parser.getName().equalsIgnoreCase("price")) {
                                posts.setPrice(tagValue);
                            } else if (parser.getName().equalsIgnoreCase("description")) {
                                Log.d(TAG, "parse: " + tagValue);
                                posts.setDescription(tagValue);
                            } else if (parser.getName().equalsIgnoreCase("param")) {
                                if (tagValue != null && tagValue.contains("гр")) {
                                    posts.setWeight(tagValue);
                                }
                            } else if (parser.getName().equalsIgnoreCase("categoryId")) {
                                posts.setDescription(tagValue);
                            }
                        }
                        if (parser.getName().equalsIgnoreCase("offer")) {
                            postLists.add(posts);
//                            Log.d(TAG, "parse: " + postLists.size());
//                            Log.d(TAG, "parse: " + postLists.get(0));
//                            Log.d(TAG, "parse: " + postLists.get(1));
                            isSiteMeta = true;
                        }
                        break;
                }
                parser.next();
            }
        } catch (Exception e) {
            Log.d(TAG, "Exception: " + e.toString());
        }
    }
 
    private XmlPullParser prepareXpp(String rss) throws XmlPullParserException {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser parser = factory.newPullParser();
        parser.setInput(new StringReader(rss));
        return parser;
    }
Добавлено через 5 часов 28 минут
Тема закрыта. Все вопросы решены!
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
31.08.2016, 09:41
Цитата Сообщение от PhantomR Посмотреть сообщение
Тема закрыта. Все вопросы решены!
небо улыбалось бы вам если бы вы найдя решение оставляли его в теме
0
5 / 5 / 1
Регистрация: 04.02.2016
Сообщений: 78
31.08.2016, 11:16  [ТС]
Закоммитил новый проект на gitHub.

С фрагментами тупейшая ошибка не было break; в switch-case.

Категории, сделал проще, отпарсил всё, а потом передавал нужные категории при вызове нужного фрагмента.
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
    private final static String CATEGORY_ID_SALAD = "7";
    private final static String CATEGORY_ID_DESSERT = "10";
    private final static String CATEGORY_ID_PIZZA = "1";
    private final static String CATEGORY_ID_SOUP = "6";
 
  adapter.setListener(new CategoryAdapter.Listener() {
            public void onClick(int position) {
                Fragment fragment;
                FragmentTransaction ft;
                Bundle bundle;
                switch (position) {
                    case 0:
                        fragment = new CategoryListFragment();
                        bundle = new Bundle();
                        bundle.putString("ID", CATEGORY_ID_SALAD);
                        fragment.setArguments(bundle);
                        ft = getFragmentManager().beginTransaction();
                        ft.replace(R.id.content_frame, fragment).addToBackStack(null).commit();
                        break;
                    case 1:
                        fragment = new CategoryListFragment();
                        bundle = new Bundle();
                        bundle.putString("ID", CATEGORY_ID_SOUP);
                        fragment.setArguments(bundle);
                        ft = getFragmentManager().beginTransaction();
                        ft.replace(R.id.content_frame, fragment).addToBackStack(null).commit();
                        break;
                    case 2:
                        fragment = new CategoryListFragment();
                        bundle = new Bundle();
                        bundle.putString("ID", CATEGORY_ID_DESSERT);
                        fragment.setArguments(bundle);
                        ft = getFragmentManager().beginTransaction();
                        ft.replace(R.id.content_frame, fragment).addToBackStack(null).commit();
                        break;
                    case 3:
                        fragment = new CategoryListFragment();
                        bundle = new Bundle();
                        bundle.putString("ID", CATEGORY_ID_PIZZA);
                        fragment.setArguments(bundle);
                        ft = getFragmentManager().beginTransaction();
                        ft.replace(R.id.content_frame, fragment).addToBackStack(null).commit();
                        break;
                    default:
                        break;
                }
            }
        });
v RV сложнее, Сейчас скину. Правильный парсинг. ПРоблемы была при создании и пересоздании элемента. Вот весь парсинг:
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
 public void parse(String xml) {
        String name = "";
        String weight = "";
        String price = "";
        String imageUrl = "";
        String description = "";
        String categoryId = "";
        try {
            XmlPullParser parser = prepareXpp(xml);
            Boolean isSiteMeta = true;
            String tagValue = null;
            int event = parser.getEventType();
            postLists.clear();
            do {
                String tagName = parser.getName();
                switch (event) {
                    case XmlPullParser.START_TAG:
                        if (tagName.equalsIgnoreCase("offer")) {
                            isSiteMeta = false;
                        }
                        break;
                    case XmlPullParser.TEXT:
                        tagValue = parser.getText();
                    default:
                        break;
                    case XmlPullParser.END_TAG:
                        if (!isSiteMeta) {
                            if (tagName.equalsIgnoreCase("name")) {
                                name = tagValue;
                            } else if (tagName.equalsIgnoreCase("picture")) {
                                imageUrl = tagValue;
                            } else if (tagName.equalsIgnoreCase("price")) {
                                price = tagValue;
                            } else if (tagName.equalsIgnoreCase("description")) {
                                description = tagValue;
                            } else if (tagName.equalsIgnoreCase("param")) {
                                if (tagValue != null && tagValue.contains("гр")) {
                                    weight = tagValue;
                                }
                            } else if (tagName.equalsIgnoreCase("categoryId")) {
                                categoryId = tagValue;
                            }
                        }
                        if (tagName.equalsIgnoreCase("offer")) {
                            postLists.add(new PostList(name, weight, price,
                                    imageUrl, description, categoryId));
                            isSiteMeta = true;
                        }
                        break;
                }
                event = parser.next();
            } while (event != XmlPullParser.END_DOCUMENT);
        } catch (Exception e) {
            Log.d(TAG, "Exception: " + e.toString());
        }
    }
 
    private XmlPullParser prepareXpp(String rss) throws XmlPullParserException {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser parser = factory.newPullParser();
        parser.setInput(new StringReader(rss));
        return parser;
    }
Добавлено через 52 секунды
Ещё подсказали, что парсинг и запросы лучше делать через Retrofit. Планирую заняться этим вопросом в ближ дни
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2016, 11:16
Помогаю со студенческими работами здесь

Xml sax parser как вытащить картинку из тега <description>
пишу клиент для сайта использую xml sax parser вопрос как вытащить картинки и сделать что бы они коректно отображались класс парсера ...

Advanced RecyclerView и Expandable RecyclerView
Сделал expandable recycler view на основе advancedRecyclerView сборочки, но не важно это думаю, наследуется от обычного RecyclerView. ...

XML Parser
Здравствуйте! есть xml-файл с таким содержанием &lt;shop&gt; &lt;category name=&quot;for_mum&quot;&gt; &lt;good&gt;веник&lt;/good&gt; ...

XML Parser
Разбираюсь с open source проектом http://conv-net.sourceforge.net/doc/index.html свёрточная нейронная сеть вот, в котором в свою очередь...

JavaScript parser xml
Добрый день, помогите пожалуйста пропарсить данные и разобраться как это все работает. Задача: Есть запрос который возвращает...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru