Android + Scala + RxJava

Android + Scala + RxJava

Como utilizar o RxJava com Scala no Android. (Portuguese)

E6685bb574e4e72f418cfee363224c08?s=128

Andre Luiz Carvalho

August 08, 2014
Tweet

Transcript

  1. ANDROID + SCALA + RXJAVA Programação Reativa Funcional

  2. ANDROID + SCALA? • Como eu faço isso? Explicações aqui:

    • https://www.youtube.com/watch?v=ZoYJidA7nIw • http://www.slideshare.net/andreluizcarvalho/scala-no-android
  3. RXJAVA? “Programação Reativa Funcional para a JVM” github.com/netflix/rxjava

  4. POR QUE?

  5. EVENTOS & SERVIÇOS REMOTOS • Tudo o que acontece em

    UI é evento • Eventos do sistema, mensagens, notificações push • Os dados estão na “nuvem” • Acesso local em banco também tem custo • Um só modelo de evento / execução assíncrona
  6. FRP FTW! • Estilo de programação de maneira declarativa e

    assíncrona • Tratar eventos como a observação de uma sequência • Tratamento de erros mais amigáveis • Composição!
  7. ANDROID ON STEROIDS • Como transformar os eventos do Android

    em Observables? • Podemos usar Java • Conversões implícitas para Scala
  8. EVENTOS DO ANDROID public static Observable<Object> click(View view) { final

    PublishSubject<Object> subject = PublishSubject.create(); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { subject.onNext(new Object()); } }); return subject.asObservable(); } View Click PublishSubject: observer só receberá os eventos que acontecerem depois da inscrição.
  9. EVENTOS DO ANDROID public static Observable<String> text(TextView view) { String

    currentText = String.valueOf(view.getText()); final BehaviorSubject<String> subject = BehaviorSubject.create(currentText); view.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged( CharSequence charSequence, int i, int i2, int i3) { } @Override public void onTextChanged( CharSequence charSequence, int i, int i2, int i3) { } @Override public void afterTextChanged(Editable editable) { subject.onNext(editable.toString()); } }); return subject.asObservable(); } TextView text changed BehaviorSubject: observer receberá o último evento antes da inscrição e todos os próximos
  10. EVENTOS DO ANDROID Operação de IO: Serviços Web ReplaySubject: observer

    receberá todos os eventos ocorridos antes da inscrição e todos os próximos Dica: use o Retrofit, que já suporta o RxJava github.com/square/retrofit
  11. PROPRIEDADES DO ANDROID static public Observer<String> text(final TextView view) {

    return new Observer<String>() { @Override public void onCompleted() {} @Override public void onError(Throwable e) {} @Override public void onNext(String text) { view.setText(text); } }; } TextView text
  12. EXEMPLO Banner Entrada de texto Contagem Botão de ação

  13. EXEMPLO val messageField = find[EditText](R.id.message) val charCountLabel = find[TextView](R.id.char_count) !

    val message: Observable[String] = Events.text(messageField) val charCountObserver = Properties.text(charCountLabel) ! val count = message.map(str => str.length) count.map(n => n.toString).subscribe(charCountObserver) Contagem do texto
  14. EXEMPLO val sendButton = find[Button](R.id.send) count.map(_ > 0).subscribe(enabled => sendButton.setEnabled(enabled))

    val sendClicked = Events.click(sendButton) Habilitando o botão de ação Ação do botão message.combineLatest(sendClicked).subscribe { textAndObject => startActivity(new Intent(Intent.ACTION_VIEW, "http://www.google.com/search?q="+textAndObject._1)) }
  15. EXEMPLO DE SERVIÇO: BANNER

  16. PUT YOUR HANS ON CODE! github.com/pinuts-studios/android-scala-rxjava

  17. OBRIGADO!

  18. PERGUNTAS? Quer trabalhar com scala? Fale comigo! André Luiz Carvalho

    andre@pinuts.com.br @alcarv RH da Pinuts rh@pinuts.com.br