$30 off During Our Annual Pro Sale. View Details »

Reactive Libraries for Android

Reactive Libraries for Android

Presentation covering basics of RxJava in a nutshell and showing exemplary reactive libraries for Android. It also touches the topic of unit testing of the reactive code. The presentation was shown on 27.10.2015 in Katowice, Poland during Silesia Mobile Group meetup.

Piotr Wittchen

October 27, 2015
Tweet

More Decks by Piotr Wittchen

Other Decks in Programming

Transcript

  1. View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. View Slide


  6. View Slide

  7. Observable.from(names).subscribe(new Action1() {
    @Override public void call(String s) {
    System.out.println("Hello " + s + "!");
    }
    });

    View Slide

  8. Observable.from(names.subscribe(new Subscriber() {
    @Override public void onCompleted() {
    // called after calling onNext() for the final time
    }
    @Override public void onError(Throwable e) {
    // called whenever error occurrs
    }
    @Override public void onNext(String s) {
    // called whenever Observable emits an item
    }
    });

    View Slide

  9. Observable.from(names)
    .map(...)
    .filter(...)
    .merge(...)
    ...
    .subscribe(new Action1() {
    @Override public void call(String s) {
    System.out.println("Hello " + s + "!");
    }
    });

    View Slide

  10. Observable.from(names)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1() {
    @Override public void call(String s) {
    System.out.println("Hello " + s + "!");
    }
    });

    View Slide

  11. View Slide





  12. View Slide

  13. View Slide

  14. new ReactiveNetwork().observeConnectivity(context)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1() {
    @Override public void call(Connectivity connectivity) {
    // do something with connectivity
    }
    });

    View Slide

  15. new ReactiveSensors(context).observeSensor(Sensor.TYPE_GYROSCOPE)
    .filter(ReactiveSensorEvent.filterSensorChanged())
    .subscribe(new Action1() {
    @Override public void call(ReactiveSensorEvent reactiveSensorEvent) {
    SensorEvent event = reactiveSensorEvent.getSensorEvent();
    float x = event.values[0];
    float y = event.values[1];
    float z = event.values[2];
    }
    });
    }

    View Slide

  16. View Slide

  17. Prefser prefser = new Prefser(context); // or new Prefser(sharedPreferences);
    prefser.put("key1", true);
    prefser.put("key2", new MyObject());
    prefser.put("key3", Arrays.asList(true, false, true));
    Boolean singleBoolean = prefser.get("key1", Boolean.class, false);
    MyObject myObject = prefser.get("key2", MyObject.class, new MyObject());
    TypeToken> typeToken = new TypeToken>() {};
    List booleans = prefser.get("key3", typeToken, defaultBooleans);

    View Slide

  18. • observe(key, classOfT/TypeTokenOfT, defaultValue)

    • getAndObserve(key, classOfT/TypeTokenOfT, defaultValue)

    • observePreferences()

    View Slide

  19. prefser.observe(key, Boolean.class, false)
    .subscribe(new Action1() {
    @Override public void call(Boolean value) {
    // do something with value
    }
    });

    View Slide

  20. new ReactiveBeacons(context).observe()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1() {
    @Override public void call(Beacon beacon) {
    // do something with beacon
    }
    });

    View Slide

  21. View Slide

  22. View Slide

  23. Observable getComputedResult() { … }
    @Test public void shouldReturnExpectedResult() {
    String expected = "result"
    String generated = getComputedResult().toBlocking().first();
    assertThat(generated).isEqualTo(expected);
    }

    View Slide

  24. @Test public void shouldObserveBoolean() {
    String givenKey = "someKey";
    boolean givenValue = true;
    Boolean defaultValue = false;
    RecordingObserver observer = new RecordingObserver<>();
    prefser.observe(givenKey, Boolean.class, defaultValue).subscribe(observer);
    prefser.put(givenKey, givenValue);
    assertThat(observer.takeNext()).isTrue();
    observer.assertNoMoreEvents();
    }

    View Slide

  25. ● Pros
    ● Cons

    View Slide

  26. View Slide