Давно уже ничего не писал сюда. Но тут повод сам появился, скачал в сети книгу "Reactive android programming" и решил потихоньку постигать тему реактивной java и заодно описывать свой опыт. В детальнейшем если осилю написание постов, то притуплю к разработке бота для telegram и также процесс изучения планирую описать в блоге. Также по программированию для ARM контроллеров хотел написать посты (идей очень много, не всегда удается их реализовать)
Больше наверное в блоге пишу для себя. потому как по прошествии месяцев бывает довольно сложно вспомнить прочитанное. В голове оно откладывается в долговременную память, но доставать бывает из неё достаточно проблематично. И так, погнали...
Скажу сразу, я не с нуля штурмую эту тему, знакомство началось с одного из приложений, где решил воспользоваться архитектурным подходом MVP и в частности его реализации в библиотеке Moxy, Либа очень простая и удобная. Вам достаточно лишь подключить её в gradle зависимостях.
compile 'com.arello-mobile:moxy:1.4.5'
compile 'com.arello-mobile:moxy-android:1.4.5'
compile 'com.arello-mobile:moxy-app-compat:1.4.5'
Затем воспользоваться готовым шаблоном для AS, либо написать всё с нуля по примеру. Я попробовал и так и так. Остановился в итоге на шаблоне (видимо лень победила :D ). Отвлекся немного, ведь тема этого поста - реактивное программировани, - RxJava. В первый раз использовать её стал для отправки уведомлений из адаптера recycler view в UI. Этакий интерфейс между подписчиком - адаптером и эмиттером сообщений - моделью. Да, ведь не только одно применение было, ещё захотелось воспользоваться отличной библиотекой rx-mqtt-android для работы с mqtt сообщениями. Она мега удобная, представляет из себя Rx обертку над mqtt сервисом eclipse.
Перед переходом к изучению книги, немного расскажу как в проекте происходила работа с rx-mqtt. Прочитав многочисленные статьи, изучив ответы на stackoverflow решил создать класс ClientMQTT. Это простой singleton в котором присутствуют методы: getInstance() - позволяет получить объект класса MqttAndroidClient, close() - закрывает соединение, когда клиент уже не нужен, publish() - служит для публикации сообщений в брокер.
public static void publish(ArrayListcommand) throws MqttException { Observable.fromArray(command.toArray()) .concatMap(i-> Observable.just(i).delay(500, TimeUnit.MILLISECONDS)) .map(mqttMessageList-> onRequestFromPublishMessage((MqttMessage) mqttMessageList)) .flatMap(Maybe::toObservable) .filter(response -> response.getResponse().toString().equals("PUBACK msgId 1")) .subscribe(t->System.out.println("Успешная отправка сообщения: " + t.getResponse().getMessageId()));}
private static MaybeonRequestFromPublishMessage(MqttMessage mqttMessage) throws MqttException { return RxMqtt.publish(new ClientMQTT().getInstance(), "from_mobile", mqttMessage);}
Вот тут код немного корявый, я ещё до конца не разобрался почему задержка в 500 мс нормально не отрабатывает, думаю после прочтения книги всё встанет на свои места. На этом пока всё. Следующий пост расскажет о первой главе книги, конечно там будет описание hello world приложения. Возможно бегло пробегусь по тексту и напишу краткое резюме по прочитанному, ну там видно будет.
Комментариев нет:
Отправить комментарий