-Android 환경에서 Rxjava와 RxAndroid를 사용하기 위해서 rxJava의 튜토리얼을 따라서 공부합니다.
0. RxJava dependency
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.4'
1. just와 create
Just
- 객체 또는 객체 집합을 해당 객체 또는 객체를 방출하는 Observable로 변환합니다.Create
observer 메소드를 프로그램 적으로 호출하여 Observable을 처음부터 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.util.Log import hbs.com.studyandroidach.R import io.reactivex.Observable class MainActivity : AppCompatActivity() { var count = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //val myObserver = MyObserver(this, lifecycle) setContentView(R.layout.activity_main) executeJustObservable() executeCreateObservable() } //just에 있는 아이템을 출력하고 subscriber를 통해서 //item을 람다형식으로 리턴받습니다. //return subscribe(onNext, onError, onComplete, Functions.emptyConsumer()); //onNext: 아이템을 하나씩 출력 //onError: Observable의 에러를 출력 //onComplete: 성공한 후의 처리 //subscribe({}, {}, {})의 구조로 onNext, onError, onComplete 를 실행 private fun executeJustObservable() = Observable.just(1, "hello", 2, "bye").subscribe({ item -> Log.d("justItem" + count.toString(), item.toString()) count++ }, { errorContent -> Log.d("error", errorContent.message) }, { Log.d("on", "Complete") }) //create는 위의 next, error, complete를 변수를 통해서 직접 제어 가능 //해당 로직은 emitter를 통해서 onNext를 임의로 실행시켜줍니다. //hello1,hello2, hello3이 출력되고 subscribe의 onComplete는 emitter.onComplete가 주석처리 되어있기 때문에 //실행되지 않습니다. private fun executeCreateObservable() = Observable.create<String> { emitter -> emitter.onNext("hello1") emitter.onNext("hello2") emitter.onNext("hello3") //emitter.onComplete() }.subscribe({ Log.d("createItem", it.toString()) }, { Log.d("error", it.message) }, { Log.d("on", "Complete") }) } | cs |
2. fromArray
fromArray
- Observable을 통해서 array를 다룰 수 있도록 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.util.Log import hbs.com.studyandroidach.R import io.reactivex.Observable class MainActivity : AppCompatActivity() { var count = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //val myObserver = MyObserver(this, lifecycle) setContentView(R.layout.activity_main) executeFromArray(arrayOf("hello","hi","two")) } private fun executeFromArray(datas: Array<String>) = Observable.fromArray(datas).subscribe { datas-> for(data in datas){ Log.d("data",data) } } } | cs |
3. Interval
Interval
- 특정 시간 간격만큼 간격을 둔 정수 시퀀스를 방출하는 Observable을 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.util.Log import hbs.com.studyandroidach.R import io.reactivex.Observable import java.util.concurrent.TimeUnit class MainActivity : AppCompatActivity() { var count = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) executeIntervalObservable() } //interval(시작 딜레이, ~n 마다, 단위) //TimerTask와 Timer처럼 ~초마다 작업을 실행할 수 private fun executeIntervalObservable() = Observable.interval(0,1,TimeUnit.SECONDS).subscribe{ Log.d("count", count.toString()) count++ } } | cs |
4. Range
Range
- 일련의 정수 범위를 방출하는 Observable을 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.util.Log import hbs.com.studyandroidach.R import io.reactivex.Observable import java.util.concurrent.TimeUnit class MainActivity : AppCompatActivity() { var count = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //val myObserver = MyObserver(this, lifecycle) setContentView(R.layout.activity_main) executeRangeObservable() } //range를 통해서 0번 인덱스에서 10까지 private fun executeRangeObservable() = Observable.range(0, 10).subscribe { index-> Log.d("index",index.toString()) } } | cs |
5. fromIterable
fromIterable
- Observable을 통해서 Iterable 자료형을 다룹니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //val myObserver = MyObserver(this, lifecycle) setContentView(R.layout.activity_main) executeFromIterable(arrayListOf("hello","hi","two")) } private fun executeFromIterable(datas:Iterable<String>) = Observable.fromIterable(datas).subscribe{data-> Log.d("myData",data) } } | cs |
6. Filter & Map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class MainActivity : AppCompatActivity() { var count = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //val myObserver = MyObserver(this, lifecycle) setContentView(R.layout.activity_main) executeAdvancedFromIterable(arrayListOf("hello","hi","twp","happy","hit")) } //filter를 통해서 it이 twp인 것을 검색함 //map을 통해서 data를 private fun executeAdvancedFromIterable(datas: Iterable<String>) = Observable.fromIterable(datas) .filter { it-> it == "twp" }.map{ data->"search:$data"}.subscribe { searchData -> Log.d("result",searchData) } } | cs |
'Android 공부 > rxJava 공부' 카테고리의 다른 글
RxJava 공부 4 - fromCallable (3) | 2019.08.06 |
---|---|
RxJava 공부 3 - Map과 FlatMap, Timer와 interval, FlatMap과 ConcatMap (0) | 2018.12.10 |
RxJava 공부 2 - AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject (0) | 2018.12.10 |