Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
PhantomR
5 / 5 / 0
Регистрация: 04.02.2016
Сообщений: 74
#1

Parser XML + RecyclerView + Fragments - Программирование Android

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

3 вопроса.

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

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

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

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

Вот проект! https://github.com/PhantomRec/OnlineShopProject
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2016, 22:54     Parser XML + RecyclerView + Fragments
Посмотрите здесь:
Пример fragments and RecyclerView Android
Android Xml sax parser как вытащить картинку из тега <description>
Android Advanced RecyclerView и Expandable RecyclerView
Android Fragments
Android Fragments
Android Fragments и service
Fragments и Activity Android
RadioButton & Fragments Android
Работа с fragments и MediaPlayer Android
Android Реклама admob в fragments
Как передать данные из Fragments в DialogFragment Android
RecyclerView Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
29.08.2016, 11:25
  #2

Не по теме:

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

PhantomR
5 / 5 / 0
Регистрация: 04.02.2016
Сообщений: 74
30.08.2016, 14:52  [ТС]     Parser XML + RecyclerView + Fragments #3
Хм. Если вы смотрели проект. То там готово 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 минут
Тема закрыта. Все вопросы решены!
vxg
Модератор
3116 / 1918 / 208
Регистрация: 13.01.2012
Сообщений: 7,333
31.08.2016, 09:41     Parser XML + RecyclerView + Fragments #4
Цитата Сообщение от PhantomR Посмотреть сообщение
Тема закрыта. Все вопросы решены!
небо улыбалось бы вам если бы вы найдя решение оставляли его в теме
PhantomR
5 / 5 / 0
Регистрация: 04.02.2016
Сообщений: 74
31.08.2016, 11:16  [ТС]     Parser XML + RecyclerView + Fragments #5
Закоммитил новый проект на 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. Планирую заняться этим вопросом в ближ дни
Yandex
Объявления
31.08.2016, 11:16     Parser XML + RecyclerView + Fragments
Ответ Создать тему
Опции темы

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