RxJava In Baby Steps

159

Transcript of RxJava In Baby Steps

Page 1: RxJava In Baby Steps
Page 2: RxJava In Baby Steps

a learning curve

Page 3: RxJava In Baby Steps

a steep learning curve

Page 4: RxJava In Baby Steps

you

a steep learning curve

Page 5: RxJava In Baby Steps

superstar

a steep learning curve

you

Page 6: RxJava In Baby Steps

you

superstar

a steep learning curve

Page 7: RxJava In Baby Steps

you

superstar

a steep learning curve

me

Page 8: RxJava In Baby Steps

RxJava in baby steps@brwngrldev

Page 9: RxJava In Baby Steps

asynchronous data streams

Page 10: RxJava In Baby Steps
Page 11: RxJava In Baby Steps

GPS Updates

Time

Page 12: RxJava In Baby Steps

GPS Updates

Time-36.34543, 3.23445

Page 13: RxJava In Baby Steps

-36.34543, 3.23445-36.24543, 3.23425

GPS Updates

Time

Page 14: RxJava In Baby Steps

-36.34543, 3.23445-36.24543, 3.23425-35.34543, 3.13445

GPS Updates

Time

Page 15: RxJava In Baby Steps

Time

server response

Page 16: RxJava In Baby Steps

i want toys!!!

Time

server response

Page 17: RxJava In Baby Steps

Time

server responsetoys

Page 18: RxJava In Baby Steps

Time

i want toys!!!

server response

Page 19: RxJava In Baby Steps

Time

server response

Page 20: RxJava In Baby Steps

Which of the following is an asynchronous data stream?

A: click events

B: database access

C: server response

D: all of the above

Page 21: RxJava In Baby Steps

A: click events

B: database access

C: server response

D: all of the above

Which of the following is an asynchronous data stream?

Page 22: RxJava In Baby Steps
Page 23: RxJava In Baby Steps
Page 24: RxJava In Baby Steps
Page 25: RxJava In Baby Steps

scientific Research

Page 26: RxJava In Baby Steps

scientific Research

Page 27: RxJava In Baby Steps
Page 28: RxJava In Baby Steps
Page 29: RxJava In Baby Steps

Data Transformation

Observable.just(5, 6, 7) .map { ";-) ".repeat(it) } .subscribe { println(it) }

Page 30: RxJava In Baby Steps

Data Transformation

Observable.just(5, 6, 7) .map { ";-) ".repeat(it) } .subscribe { println(it) }

;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

Page 31: RxJava In Baby Steps

chaining

Observable.just(5, 6, 7) .map { ";-) ".repeat(it) } .filter { it.length < 24 } .subscribe { println(it) }

Page 32: RxJava In Baby Steps

chaining

;-) ;-) ;-) ;-) ;-)

Observable.just(5, 6, 7) .map { ";-) ".repeat(it) } .filter { it.length < 24 } .subscribe { println(it) }

Page 33: RxJava In Baby Steps
Page 34: RxJava In Baby Steps
Page 35: RxJava In Baby Steps

RxJava is. . . ?

A: the silver bullet

B: simply magic

C: pure voodoo

D: a library

Page 36: RxJava In Baby Steps

RxJava is. . . ?

A: the silver bullet

B: simply magic

C: pure voodoo

D: a library

Page 37: RxJava In Baby Steps

listOf(5, 6, 7) .map { it * 5 } .filter { it > 25 }

kotlin collections

Page 38: RxJava In Baby Steps

listOf(5, 6, 7) .map { it * 5 } .filter { it > 25 }

kotlin collections5 6 7

Page 39: RxJava In Baby Steps

listOf(5, 6, 7) .map { it * 5 } .filter { it > 25 }

kotlin collections5 6 7

map

25 30 35

Page 40: RxJava In Baby Steps

listOf(5, 6, 7) .map { it * 5 } .filter { it > 25 }

kotlin collections5 6 7

map

25 30 35

filter

30 35

Page 41: RxJava In Baby Steps
Page 42: RxJava In Baby Steps

listOf(5, 6, 7) .asSequence() .map { it * 5 } .filter { it > 25 } .toList()

kotlin sequences

Page 43: RxJava In Baby Steps

kotlin sequenceslistOf(5, 6, 7) .asSequence() .map { it * 5 } .filter { it > 25 } .toList()

5 6 7

Page 44: RxJava In Baby Steps

5 6 7

map

filter

kotlin sequences

25

listOf(5, 6, 7) .asSequence() .map { it * 5 } .filter { it > 25 } .toList()

Page 45: RxJava In Baby Steps

5 6 7

map

filter

kotlin sequences

25 30

30

listOf(5, 6, 7) .asSequence() .map { it * 5 } .filter { it > 25 } .toList()

Page 46: RxJava In Baby Steps

5 6 7

map

filter

kotlin sequences

25 30 35

30 35

listOf(5, 6, 7) .asSequence() .map { it * 5 } .filter { it > 25 } .toList()

Page 47: RxJava In Baby Steps
Page 48: RxJava In Baby Steps

asynchronous data streams

Page 49: RxJava In Baby Steps

RxJavanumbers .map { it * 5 } .filter { it > 25 } .subscribe()

Page 50: RxJava In Baby Steps

RxJavanumbers .map { it * 5 } .filter { it > 25 } .subscribe()

5

25

map

filter

Page 51: RxJava In Baby Steps

RxJavanumbers .map { it * 5 } .filter { it > 25 } .subscribe()

5 6

map

filter

25 30

30

Page 52: RxJava In Baby Steps

RxJavanumbers .map { it * 5 } .filter { it > 25 } .subscribe()

5 6

map

filter

25 30

30 35

7

35

35

Page 53: RxJava In Baby Steps

flexible threading

Page 54: RxJava In Baby Steps

schedulers

Page 55: RxJava In Baby Steps

Observable.just(5, 6, 7) .map { ";-) ".repeat(it) } .subscribe { println(it) }

Page 56: RxJava In Baby Steps

Observable.just(5, 6, 7) .subscribeOn(Schedulers.io()) .map { ";-) ".repeat(it) } .subscribe { println(it) }

Page 57: RxJava In Baby Steps
Page 58: RxJava In Baby Steps

The Basics

observable

Page 59: RxJava In Baby Steps

The Basics

observableobserver

Page 60: RxJava In Baby Steps

The Basics

operators observableobserver

Page 61: RxJava In Baby Steps

observable

Page 62: RxJava In Baby Steps
Page 63: RxJava In Baby Steps

hot observable

Time

Page 64: RxJava In Baby Steps

hot observable

Timei want hugs!!!

Page 65: RxJava In Baby Steps

hot observable

Timehugs

Page 66: RxJava In Baby Steps

hot observable

Timehugs hugs

Page 67: RxJava In Baby Steps

hot observable

Timehugs hugs hugs

Page 68: RxJava In Baby Steps
Page 69: RxJava In Baby Steps

Cold observable

Time

Page 70: RxJava In Baby Steps

Cold observable

Time

Page 71: RxJava In Baby Steps

Cold observable

Time

Page 72: RxJava In Baby Steps

Cold observable

Timehugs

Page 73: RxJava In Baby Steps

Cold observable

Timehugs hugs

Page 74: RxJava In Baby Steps

Cold observable

Timehugs hugs hugs

Page 75: RxJava In Baby Steps
Page 76: RxJava In Baby Steps

where?

Page 77: RxJava In Baby Steps

Observable.create<Int> { subscriber -> }

Page 78: RxJava In Baby Steps

Observable.create<Int> { subscriber -> }

Observable.just(item1, item2, item3)

Page 79: RxJava In Baby Steps

Observable.create<Int> { subscriber -> }

Observable.just(item1, item2, item3)

Observable.interval(2, TimeUnit.SECONDS)

Page 80: RxJava In Baby Steps

Observable.create<Int> { subscriber ->

}

Page 81: RxJava In Baby Steps

Observable.create<Int> { subscriber -> Logger.log("create")

Logger.log("complete") }

Logger.log("done")

Page 82: RxJava In Baby Steps

Observable.create<Int> { subscriber -> Logger.log("create") subscriber.onNext(5) subscriber.onNext(6) subscriber.onNext(7)

Logger.log("complete") }

Logger.log("done")

Page 83: RxJava In Baby Steps

Observable.create<Int> { subscriber -> Logger.log("create") subscriber.onNext(5) subscriber.onNext(6) subscriber.onNext(7) subscriber.onComplete() Logger.log("complete") }

Logger.log("done")

Page 84: RxJava In Baby Steps
Page 85: RxJava In Baby Steps
Page 86: RxJava In Baby Steps

A: emit items

B: be cold

C: be hot

D: all of the above

Observables can. . .

Page 87: RxJava In Baby Steps

A: emit items

B: be cold

C: be hot

D: all of the above

Observables can. . .

Page 88: RxJava In Baby Steps

observer

Page 89: RxJava In Baby Steps

interface Observer<T> { fun onError(e: Throwable)

fun onComplete()

fun onNext(t: T)

fun onSubscribe(d: Disposable) }

Page 90: RxJava In Baby Steps

interface Observer<T> { fun onError(e: Throwable)

fun onComplete()

fun onNext(t: T)

fun onSubscribe(d: Disposable) }

Page 91: RxJava In Baby Steps

interface Observer<T> { fun onError(e: Throwable)

fun onComplete()

fun onNext(t: T)

fun onSubscribe(d: Disposable) }

Page 92: RxJava In Baby Steps

interface Observer<T> { fun onError(e: Throwable)

fun onComplete()

fun onNext(t: T)

fun onSubscribe(d: Disposable) }

Page 93: RxJava In Baby Steps

interface Observer<T> { fun onError(e: Throwable)

fun onComplete()

fun onNext(t: T)

fun onSubscribe(d: Disposable) }

Page 94: RxJava In Baby Steps

observer’s lifecycleonSubscribe

Page 95: RxJava In Baby Steps

observer’s lifecycle

onNext Normal flow

onSubscribe

Page 96: RxJava In Baby Steps

observer’s lifecycle

onComplete

Normal flow

onSubscribe

onNext

Page 97: RxJava In Baby Steps

observer’s lifecycle

onComplete onError

Normal flow

onSubscribe

onNext

Page 98: RxJava In Baby Steps

val observer = object : Observer<Int> { override fun onError(e: Throwable) { Logger.log(e) }

override fun onComplete() { Logger.log("on complete") }

override fun onNext(t: Int) { Logger.log("next: $t") }

override fun onSubscribe(d: Disposable) { Logger.log("on subscribe") } }

Page 99: RxJava In Baby Steps
Page 100: RxJava In Baby Steps

interface Consumer<T> {

fun accept(t: T) }

Page 101: RxJava In Baby Steps

val consumer = object : Consumer<Int> {

override fun accept(t: Int) { Logger.log("next: $t") }

}

Page 102: RxJava In Baby Steps
Page 103: RxJava In Baby Steps
Page 104: RxJava In Baby Steps

val consumer = Consumer<Int> { t -> Logger.log("next: $t") }

obs.subscribe(consumer)

consumer

Page 105: RxJava In Baby Steps

obs.subscribe(Consumer<Int> { t -> Logger.log("next: $t") })

consumer

Page 106: RxJava In Baby Steps

obs.subscribe({ t -> Logger.log("next: $t") })

consumer

Page 107: RxJava In Baby Steps

obs.subscribe{ t -> Logger.log("next: $t") }

consumer

Page 108: RxJava In Baby Steps

obs.subscribe{ Logger.log("next: $it") }

consumer

Page 109: RxJava In Baby Steps
Page 110: RxJava In Baby Steps

A: have a lifecycle

B: always complete

C: Never Error

D: all of the above

Observers. . .

Page 111: RxJava In Baby Steps

Observers. . .

A: have a lifecycle

B: always complete

C: Never Error

D: all of the above

Page 112: RxJava In Baby Steps

operator

Page 113: RxJava In Baby Steps

Time

Operator: map()

Page 114: RxJava In Baby Steps

Time

Operator: map()

:-):-(

Page 115: RxJava In Baby Steps

Time

Operator: map()

:-)

:-)

:-(

:-(

Page 116: RxJava In Baby Steps

Time

Operator: map()

:-)

:-) :-)

:-(

:-(

:-(

Page 117: RxJava In Baby Steps

Time

Operator: map()

:-)

:-) :-) :-)

:-(

:-(:-(:-(

Page 118: RxJava In Baby Steps

Operator: map()

Observable.just(5, 6, 7) .map { ";-) ".repeat(it) } .subscribe { println(it) }

Page 119: RxJava In Baby Steps

Operator: map()

;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

Observable.just(5, 6, 7) .map { ";-) ".repeat(it) } .subscribe { println(it) }

Page 120: RxJava In Baby Steps

Operator: map()Observable.just(5, 6, 7) .map(object: Function<Int, String> { override fun apply(t: Int): String { return ";-) ".repeat(t) } }) .subscribe { println(it) }

Page 121: RxJava In Baby Steps

Operator: map()Observable.just(5, 6, 7) .map(object: Function<Int, String> { override fun apply(t: Int): String { return ";-) ".repeat(t) } }) .subscribe { println(it) }

Page 122: RxJava In Baby Steps

Operator: map()Observable.just(5, 6, 7) .map(object: Function<Int, String> { override fun apply(t: Int): String { return ";-) ".repeat(t) } }) .subscribe { println(it) }

Page 123: RxJava In Baby Steps

Operator: map()Observable.just(5, 6, 7) .map(object: Function<Int, String> { override fun apply(t: Int): String { return ";-) ".repeat(t) } }) .subscribe { println(it) }

Page 124: RxJava In Baby Steps

.map(object: Function<Int, String> { override fun apply(t: Int): String { return ";-) ".repeat(t) } })

.map { ";-) ".repeat(it) }

Page 125: RxJava In Baby Steps
Page 126: RxJava In Baby Steps

what’s the output?Observable.just(1, 2, 3) .map { it * 2 } .subscribe { println(it) }

Page 127: RxJava In Baby Steps

A: 1, 2, 3

B: a, b, c

C: 2, 4, 6

D: 6, 2, 4

Observable.just(1, 2, 3) .map { it * 2 } .subscribe { println(it) }

what’s the output?

Page 128: RxJava In Baby Steps

Observable.just(1, 2, 3) .map { it * 2 } .subscribe { println(it) }

A: 1, 2, 3

B: a, b, c

C: 2, 4, 6

D: 6, 2, 4

what’s the output?

Page 129: RxJava In Baby Steps

what’s the output?Observable.just(1, 2, 3) .map { it * 2 } .filter { it < 6 } .subscribe { println(it) }

Page 130: RxJava In Baby Steps

A: 2, 3, 1

B: 2, 4

C: 1, 2, 3

D: 6, 4

what’s the output?Observable.just(1, 2, 3) .map { it * 2 } .filter { it < 6 } .subscribe { println(it) }

Page 131: RxJava In Baby Steps

what’s the output?Observable.just(1, 2, 3) .map { it * 2 } .filter { it < 6 } .subscribe { println(it) }

A: 2, 3, 1

B: 2, 4

C: 1, 2, 3

D: 6, 4

Page 132: RxJava In Baby Steps

Operator: flatmap()

via reactivex.io

Page 133: RxJava In Baby Steps

Operator: flatmap()

via reactivex.io

item

Page 134: RxJava In Baby Steps

Operator: flatmap()

via reactivex.io

item observable

Page 135: RxJava In Baby Steps

Operator: flatmap()

Observable.just( , ) .flatMap( { Observable.just( ) } ) .subscribe { println(it) }

:-( :-(

Page 136: RxJava In Baby Steps

time

flatmap

Page 137: RxJava In Baby Steps

time

flatmap

:-(

Page 138: RxJava In Baby Steps

time

flatmap

:-(

Page 139: RxJava In Baby Steps

time

flatmap

:-(

Page 140: RxJava In Baby Steps

time

flatmap

:-( :-(

Page 141: RxJava In Baby Steps

time

flatmap

:-( :-(

Page 142: RxJava In Baby Steps

time

flatmap

:-( :-(

Page 143: RxJava In Baby Steps

time

flatmap

:-( :-(

Page 144: RxJava In Baby Steps

Long Runningasynchronous

Page 145: RxJava In Baby Steps

Operator: flatmap()

val users // Observable<User>

Page 146: RxJava In Baby Steps

Operator: flatmap()

val users // Observable<User> val posts: Observable<Post>

Page 147: RxJava In Baby Steps

Operator: flatmap()

val users // Observable<User> val posts: Observable<Post>

posts = users.flatMap { getUsersPosts(it.id) }

Page 148: RxJava In Baby Steps

Operator: flatmap()

val users // Observable<User> val posts: Observable<Post>

posts = users.flatMap { getUsersPosts(it.id) } posts.subscribe { println(it) }

Page 149: RxJava In Baby Steps

via reactivex.io

Page 150: RxJava In Baby Steps

Flowable Maybe

backpressureDisposable

Singlecompletable

Page 151: RxJava In Baby Steps

should you use rxjava?

Page 152: RxJava In Baby Steps

like functional programing?

Process items asynchronously?

compose data?

handle errors gracefully?

should you use rxjava?

Page 153: RxJava In Baby Steps

should you use rxjava?

like functional programing?

Process items asynchronously?

compose data?

handle errors gracefully?

Page 154: RxJava In Baby Steps

it depends

Page 155: RxJava In Baby Steps

The Basics

operators observableobserver

Page 156: RxJava In Baby Steps

you

Page 157: RxJava In Baby Steps

www.adavis.info@brwngrldev

Page 158: RxJava In Baby Steps

• Reactive Programming on Android with RxJava (http://amzn.to/2yOAkxn)• Reactive Programming with RxJava (http://amzn.to/2zQtqb5)• RxJava Playlist (https://goo.gl/9fw1Zv)• Learning RxJava for Android Devs (https://goo.gl/VWxFLK)• RxJava Video Course (https://caster.io/courses/rxjava)

resources

Page 159: RxJava In Baby Steps

slide design:

@lauraemilyillustrationfont: Elliot 6, fontSquirrel.com