Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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 } });

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

● ● ● ●

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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]; } }); }

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

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);

Slide 18

Slide 18 text

• observe(key, classOfT/TypeTokenOfT, defaultValue) ➔ • getAndObserve(key, classOfT/TypeTokenOfT, defaultValue) ➔ • observePreferences() ➔

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

@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(); }

Slide 25

Slide 25 text

● Pros ● Cons

Slide 26

Slide 26 text

No content