RxJava를 사용해보자

 

순서는 4단계로 이루어진다.

1. Observable 생성

2. Observable에 연산자 적용

3. 작업을 수행할 Thread와 결과를 생성할 Thread를 지정

4. Observer를 Observable에 등록 후 결과를 확인

 

단일 객체와 리스트 객체를 Observable로 생성하는 코드를 비교해보자.

단일 객체
리스트 객체

예제 코드를 올리겠다.

 

Observable의 데이터 형태이다.

 

우리는 이 Task라는 class의 Object를 생성하여 Observable하게 만들고 Observer가 관찰하게 할 것이다.

class Task(description : String, isComplete : Boolean, priority : Int)
{
    var description = description
    var isComplete = isComplete
    var priority = priority



}

 


MVVM에서 Model 역할을 하는 class이다.

다른 예로 들자면 DB에서 Data를 가져오는 역할과 비슷하다.

 

class DataSource
{

    //Task 생성
    fun createTasksList() : List<Task>
    {
        var tasks = ArrayList<Task>()
        tasks.add(Task("Task out the trash",true,3))
        tasks.add(Task("Walk the dog",false,2))
        tasks.add(Task("Make my bed",true,1))
        tasks.add(Task("Upload the dishwasher",false,0))
        tasks.add(Task("Make dinner",true,5))

        return tasks
    }

}

MainActivity내의 코드이다.

 val taskObservable = Observable // create a new Observable object
            .fromIterable<Task>(DataSource().createTasksList()) // apply 'fromIterable' operator
            .subscribeOn(Schedulers.io()) // designate worker thread (background)
            .observeOn(AndroidSchedulers.mainThread()) // designate observer thread (main thread)

        taskObservable.subscribe(object : Observer<Task?> {
            override fun onComplete() {
                Log.d(TAG, "omComplete : called.")


            }

            override fun onSubscribe(d: Disposable) {
                Log.d(TAG, "onSubscribe : called.")
                disposable.add(d)
            }

            override fun onNext(t: Task) {
                Log.d(TAG, "onNext : " + Thread.currentThread().name)
                Log.d(TAG, "onNext : " + t.description)
                  //Thread.sleep(1000)
            }

            override fun onError(e: Throwable) {
                Log.e(TAG, "onError : ", e)
            }
        })

 

taskObservable이라는 Observable 객체를 생성한다.

.fromIterable() -> 이전 class에서 가져온 Data를 넣어 순서대로 돌린다.

.subscribeOn() -> 데이터를 Background에서 뿌린다(?) 

.observeOn() -> 데이터를 Main Thread에서 관찰한다.

 

 

.subscribe() -> 넘어오는 Data를 관찰할 때마다 각각의 Method가 수행된다.

처음 관찰이 진행될 때 onSubscribe()

위에서 발행된(뿌려진) Data를 하나씩 가져올 때마다 onNext() 

모든 Data를 가져왔거나 Complete가 불렸을 때 onComplete()

 

 

 

 

 

 

 

+ Recent posts