|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
Здравствуйте, написал я парсер для Google Play и встроил его в телеграм бота. Всё получилось, работает как надо. Но встретил необъяснимую загадку: когда я пытаюсь получить информацию об играх одного разработчика, то вылетает NPE. Попробую описать логику с прикреплением кода. Есть класс, который представляет собой объект игры: Код: 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.
Здесь просто получаю объект с игрой, который я и возвращаю пользователю: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Кусок кода из парсера, на котором и получаю null: Код: java 1. 2. 3. 4. 5.
Кусок из обработчика сообщений: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Лог ошибки: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Я бы понял, что ошибка в логике парсера, если бы я получал NPE на каждой ссылке с игрой, но получаю я эту ошибку только на играх одного разработчика (Rockstar). Еще чуднее чудного: NPE вылетает только при подключении через VPN! Если отключить VPN, ошибки нет. Причем, валится, если "подключаться" из Германии. Пробовал из США - отрабатывает корректно. Всё бы хорошо, но заставить работать бота телеграм без VPN невозможно. А бот скорее всего будет деплоиться в дальнейшем на немецком хостинге. В принципе, отделил парсер от телеграм бота и ситуация повторяется. Валится он на стоимости и видимо, он не может найти на странице соответствующие атрибуты. Но страницы для всех игр одинаковые, а атрибут один. Почему атрибут пропадает, если страница всегда открывается в русской локализации - для меня загадка. Для этого у меня есть такой костыль: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Подключение проходит нормально, страница всегда открывается в русской локализации. Исходя из всего этого, у меня возник вопрос: можно ли принудительно заставить приложение подключаться к Google Play из России? Даже если я подключаюсь к VPN, но использовать российский IP или как там google определяет местоположение. Прокси какой-то использовать? Я очень плохо шарю в сетях, поэтому мне сложно сказать, есть ли иное решение, как просто подобрать "нужный и правильный " VPN. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2020, 22:49 |
|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
String price = document.select("meta[itemprop=price]").first().attr("content"); //тут NPE на GTA В данной строчки, дофига операций. Побить по разным строчкам и будете понимать, где конкретно падаете на NPE document.select select("meta[itemprop=price]").first first().attr ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2020, 23:00 |
|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev String price = document.select("meta[itemprop=price]").first().attr("content"); //тут NPE на GTA В данной строчки, дофига операций. Побить по разным строчкам и будете понимать, где конкретно падаете на NPE document.select select("meta[itemprop=price]").first first().attr Так он падает на первом же вызове метода, точнее после него, он не может найти атрибут itemprop price конкретно на этой странице. Варианта вижу два: менять VPN и хостинг, либо как-то вручную прописывать подключение. Хотелось бы попробовать второй вариант, но я не знаю как. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2020, 10:32 |
|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
Wasteland Rebel он не может найти атрибут itemprop price конкретно на этой странице. Ну так и разбирайся, почему на страница нет атрибута. Как минимум, формируй корректное сообщение об ошибке. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2020, 11:02 |
|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
Поясню свою мысль, если Web сервер не включен в розетку 220 вольт, то логично, что Wasteland Rebel он не может найти атрибут itemprop price конкретно на этой странице. Но очень странно задавать вопрос на форуме Java: "Странный NPE то появляется, то исчезает .. Всё получилось, работает как надо. Но встретил необъяснимую загадку: когда Web сервер не включен в розетку, вылетает NPE ." ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2020, 11:08 |
|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
Zzz79 Я так понимаю ты из РФ - поэтому при тестах юзаешь vpn - как ты сам говоришь бот будет деплоиться на сервера в германии- то и впн тебе не нужен и проблем не будет для проверки можешь задеплоить своего бота на хероку - и посмотреть как будет работать ИМХО лучше подумать, когда сервис будет не доступен. Чтобы программы выдавала что-то осмысленное, а не NPE :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2020, 06:24 |
|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
mad_nazgul Zzz79 Я так понимаю ты из РФ - поэтому при тестах юзаешь vpn - как ты сам говоришь бот будет деплоиться на сервера в германии- то и впн тебе не нужен и проблем не будет для проверки можешь задеплоить своего бота на хероку - и посмотреть как будет работать ИМХО лучше подумать, когда сервис будет не доступен. Чтобы программы выдавала что-то осмысленное, а не NPE :-) Так в итоге и сделал, решил изменить логику + добавил проверку на null. Если null, то просто вываливается "Информация не доступна". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2020, 13:33 |
|
Странный NPE то появляется, то исчезает
|
|||
---|---|---|---|
#18+
Wasteland Rebel Так в итоге и сделал, решил изменить логику + добавил проверку на null. Если null, то просто вываливается "Информация не доступна". прогеры делают наоборот: - сначала пишут код с проверкой в каждой строке и каждом операторе. Если новчОк. После того как каждый оператор под контролем можно заниматься БЛ и вставлять if\case\goto ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2020, 13:38 |
|
|
start [/forum/topic.php?fid=59&msg=39945278&tid=2120840]: |
0ms |
get settings: |
8ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
139ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
143ms |
get tp. blocked users: |
1ms |
others: | 6ms |
total: | 309ms |
0 / 0 |