Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android + Scala + RxJava

Android + Scala + RxJava

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

Andre Luiz Carvalho

August 08, 2014
Tweet

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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!
  4. ANDROID ON STEROIDS • Como transformar os eventos do Android

    em Observables? • Podemos usar Java • Conversões implícitas para Scala
  5. 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.
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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)) }