С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
gosteev
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
#1

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

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

Проверка наличия элемента в layout - Программирование Android
Доброго времени суток. Подскажите - как провести проверку наличия элемента в коде. В моем случае необходимо провести проверку наличия...

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

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

Проверка наличия интернет соединения - Программирование Android
Если в public void onStart() { super.onStart(); } вставить код проверки на включен ли интернет и если не...

jsoup - Программирование Android
Здрасьте. Вопрос по поводу этой замечательной библиотеке:) Есть html следующего содержания: &lt;span class=&quot;aaa&quot;&gt;Всем привет!&lt;br /&gt; ...

Jsoup - Программирование Android
Помогите пожалуйста. При нажатии на строку с заголовком приложение вылетает. Подскажите в чем дело и как потом это исправить. public...

7
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 1
18.11.2015, 16:11 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 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
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 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
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 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 парс - Программирование Android
Здравствуйте такой вопрос есть сайт который в наличие есть скрипт ... &lt;td class=&quot;time&quot;&gt; &lt;span...

Jsoup и https - Программирование Android
Здравствуйте есть вопрос. Есть сайт на https на котором нужно залогиниться чтобы получить инфу. вопрос в том как с этим работать с...

JSOUP парсинг - Программирование Android
Код парсит в textView1 с сайта class=&quot;30&quot; Как переписать/дописать код, чтоб он парсил еще и в textView2 класс=&quot;31&quot; Классы 30, 31 на...

Parsing with Jsoup - Программирование Android
Итак, пробую написать очень простое тестовое приложение, для чтения html-файлов. Вот файл JsoupDemoActivity.java: package...


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

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

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