Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
gosteev
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
#1

Проверка наличия элемента (библиотека jsoup) - Программирование Android

18.11.2015, 16:02. Просмотров 656. Ответов 7
Метки нет (Все метки)

Всем привет!
Подскажите, как можно сделать проверку на наличие элемента? То бишь есть у меня, скажем, некий Document doc, в котором я выделяю элементы, преобразую в текст и пакую в объект, а объект в список. Но есть элементы (elementsData), которые попадаются не в каждом doc.select'e и в итоге я ловлю ошибку java.lang.IndexOutOfBoundsException. Соответственно, мне и нужно проверить, есть ли такой элемент, перед тем, как его добавлять.
Java
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < doc.select(".list_item_title").size(); i++) {
                News news = new News();
 
                elementsTitle = doc.select(".list_item_title");
                news.setTitle(elementsTitle.get(i).text());
 
                elementsData = doc.select(".list_item_date");
                news.setData(elementsData.get(i).text());
 
                newsList.add(news);
            }

http://www.cyberforum.ru/android-dev/thread1148939.html

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2015, 16:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверка наличия элемента (библиотека jsoup) (Программирование Android):

Не получается распарсить rss на одном сайте. Библиотека jsoup
Вот сам сайт http://www.economist.com/sections/economics и его rss по ссылке...

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

Проверка наличия интернет соединения
Если в public void onStart() { super.onStart(); } ...

jsoup
Здрасьте. Вопрос по поводу этой замечательной библиотеке:) Есть html...

Jsoup
Помогите пожалуйста. При нажатии на строку с заголовком приложение вылетает....

7
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
18.11.2015, 16:11 #2
Лучший ответ Сообщение было отмечено gosteev как решение

Решение

Java
1
2
3
4
5
6
        Elements elements = document.select("bla-bla");
        if(!elements.isEmpty()) {
            for (Element e: elements) {
                // ля ля ля
            }
        }
и всегда когда делается select или getElements надо бы проверять на пустоту, а если какой-то метод может вернуть null (в описании обычно написано) то и на null
1
gosteev
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
18.11.2015, 16:16  [ТС] #3
Цитата Сообщение от Паблито Посмотреть сообщение
и всегда когда делается select или getElements надо бы проверять на пустоту, а если какой-то метод может вернуть null (в описании обычно написано) то и на null
А что пустота? Ну будет у меня в итоге пустой TextView, мне это не критично или тут что-то другое? В остальном спасибо за быстрый ответ! =)
0
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
18.11.2015, 16:23 #4
Пустота, в том смысле что в списке элементов может не быть ни одного элемента, то есть он будет пустой.

В моем варианте с циклом foreach можно и не делать проверку, так как если список будет пустой и цикл и не выполнится, но проверка обязательно нужна если по списку потом идти как в твоем примере.

Короче везде надо проверять, а то взяли список элементов и сразу достаем из него по индексу, а если там ничего нет? Мутновато объяснил
1
gosteev
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
18.11.2015, 17:46  [ТС] #5
Цитата Сообщение от Паблито Посмотреть сообщение
Пустота, в том смысле что в списке элементов может не быть ни одного элемента, то есть он будет пустой.
В моем варианте с циклом foreach можно и не делать проверку, так как если список будет пустой и цикл и не выполнится, но проверка обязательно нужна если по списку потом идти как в твоем примере.
Короче везде надо проверять, а то взяли список элементов и сразу достаем из него по индексу, а если там ничего нет? Мутновато объяснил
Ну я в целом вроде о том и спрашивал, как проверить, существует ли элемент. =) Собственно, сделал проверку так:
Java
1
2
3
4
elementsData = doc.select(".list_item_date");
                if (!elementsData.isEmpty()) {
                    news.setData(elementsData.get(i).text());
                }
В одном случае это сработало, в другом почему-то нет. Почему - фиг его знает, страницы идентичные, с которых это все парсится, только сам текст отличается. А как отдельно можно "проверить на пустоту", раз уж на то пошло?)
0
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
18.11.2015, 17:56 #6
код бредовый, ошибки нет, перечитай свой код пару раз и просто вникни в то, что он делает
не беги писать еще одно сообщение на форум, просто попытайся понять логику работы твоего кода (кусок кстати вырван из контекста)
0
gosteev
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
18.11.2015, 19:15  [ТС] #7
Походу задача должна совсем другая стоять на самом деле, если до меня правильно теперь дошло, как работает jsoup... Хотя в чем прям таки бредовость моего кода, я так и не уловил, проверяется, не пустой ли список на каждой итерации цикла? У меня (да и у тебя) проверяется, не пустой ли список (если я правильно понял логику работы isEmpty). При выполнении doc.select список Elements просто заполняется всеми найденными соответствующими элементами (опять же если я все правильно понял), а так как в моем случае элементов в списке elementsData оказывается меньше, чем в elementsTitle, по которому по сути сделан цикл, то и возвращается IndexOutOfBoundsException. Осталось придумать, как это обрабатывать, но это уже совсем другой вопрос походу =)
0
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
18.11.2015, 19:26 #8
бредовость в том, что судя по get(i)
селект делается в цикле каждый раз...один и тот же
его надо делать до цикла, а потом в цикле уже идти по элементам, либо делать getElements() и так далее
я всю задачу и не знаю
0
18.11.2015, 19:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2015, 19:26
Привет! Вот еще темы с решениями:

JSOUP парсинг
Код парсит в textView1 с сайта class=&quot;30&quot; Как переписать/дописать код, чтоб он...

Выборка c JSoup
Всем доброго времени суток. Столкнулся с проблемой - с сайта нужно выбрать...

Парсинг JSOUP
Всем доброго времени суток, собственно такой вопрос. Хочу спарсить сайт с...

WebView + JSOUP
Добрый день. Приложение падает с ошибкой. Подскажи, пожалуйста, в чем...


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

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

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