Как стать автором
Обновить
3
0
Владислав Лаптев @vladv75

Пользователь

Отправить сообщение
Если не затруднит, можно ли пример с Observable.fromAsync()?
Спасибо за хороший и развернутый комментарий!
Получилось так, потому что увлекся демонстрацией возможностей операторов по аналогии с прочитанными статьями и получилось в ущерб самому примеру.
Хорошо, подправлю.
Но здесь ведь работа с сетью, которая без вариантов требует отдельного потока, поэтому сразу и подписываю на отдельный поток.
Как уже написали выше, у вас проблемы с методами getURLs и getTitles. Следовало бы поймать exception внутри Observable и вернуть его подписчику в onError, чтобы он решил, что с ним делать.

Придумал может не совсем корректный пример с возвратом null, чтобы потом показать использование .filter(title -> title != null)
А exception решил пока не обрабатывать по аналогии статьи “Грокаем* RxJava, часть первая: основы”, чтобы упростить пример.

— Observable queryURLs(String url) — строка объявляет метод, который порождает строку ссылки на сайт для парсинга и возвращающего список ссылок.
Если уж решили зачем-то вдаваться в такие мелочи, выражайтесь корректно.

Переделал:
— строка объявляет Observable метод, который принимает в виде входного параметра ссылку на сайт для парсинга и возвращает результат парсинга в виде списка ссылок <List> с указанного сайта.

— new Observable.OnSubscribe() — интерфейс OnSubscribe создает подписчика
Интерфейс OnSubscribe ничего не создает, это просто интерфейс с 1 методом, который вызовется при подписке.

Переделал:
— строка объявляет интерфейс OnSubscribe с одним методом (см. ниже), который вызовется при подписке.

— subscribeOn(Schedulers.io()) — метод subscribeOn запускает наш код в дополнительном потоке;
Не совсем так. Этот метод подписывает всех Observable выше по цепочке на определенный планировщик. Повторный вызов метода ниже по цепочке (с другим планировщиком) не даст никакого результата, например.

Переделал:
— метод subscribeOn подписывает всех Observable выше по цепочке на планировщик Schedulers.io().

Названия методов Example0...1 и т.д. с заглавной буквы.

Сам не понимаю, почему назвал с заглавной буквы и почему потом не бросилось в глаза. Все соответственно исправил.

Статьи в списке источников куда полезнее.
Добавил бы еще это, Rx далеко не заканчивается на сетевых запросах:
Пагинация 1
Пагинация 2
Shake detector
Доклад Артема Зинатулина

Огромное спасибо за ссылки на статьи, большинство из них мне не попались при поиске.
1) getURLs и getTitles у вас могут null вернуть. Тогда все методы в MainExample.java, которые вызывают queryURLs, при попытке прогнать полученный список String url: urls выбросят исключение.

Может быть не совсем красиво получилось, но здесь специально сделал возврат null, чтобы потом показать использование .filter(title -> title != null)

2) Не уверен, что Jsoup нормально хендлит повороты экрана и т.п. вещи связанные с жизненным циклом Android приложений.

Jsoup никак не связан с поворотом экрана, в данном простом примере при повороте экрана происходит новая загрузка данных.

Было бы не плохо увидеть комментарии профессионалов с конкретными замечаниями и пожеланиями по доработке и развитию статьи. Хочется создать полезный материал для ИТ-сообщества. Тема не простая и хороших материалов мало.
А можно конкретизировать ваши замечания? Доработаю статью.
В принципе, retrolambda уже можно и не использовать. Ставим поддержку SDK API 24 и в проекте устанавливаем minSdkVersion на необходимую нам версию и все должно работать. У меня, например, все отлично работает на телефоне с API 17.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность