마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

RxJava + Room // Flowable.concat

0 추천

RxJava + Room 를 사용해서 앱 만드는 연습중입니다. 

앱 실행시 데이터베이스에 이미 저장되어있는 데이터를 가져오고 뿌려주려 하는데 

값을 가져오기 전에 updateRecycler가 먼저 실행되어서 

concat으로 묶어서 해결을 해봤는데요.....

이게 맞나 싶어서 질문드립니다.... 

계속 공부중 얕은 지식으로 혼란스러워  피드백 부탁드립니다....

 

RxJava 를 적용하기 전에 사용한 코드입니다. 

여기선 allowMainThreadQueries()를 사용해서 강제로 실행시켰습니다.

//List<Notes> notes에 데이터 가져오기, "SELECT * FROM notes"
notes=database.mainDao().getAll();
//가져온 notes setAdapter 갱신
updateRecycler(notes);

비동기를 위해 RxJava를 적용시키려고 Flowable로 지정하고 concat으로 합친 코드입니다...

Flowable<List<Notes>> source1 = database.mainDao().getAll();
Flowable<List<Notes>> source2 = Flowable.just(notes);

Flowable.concat(source1, source2)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(item -> updateRecycler(item));

DB 데이터 검색은 양이 많을 것을 생각해서 Flowable로 지정했습니다.

 

dkssudgktpdy (520 포인트) 님이 2022년 2월 4일 질문

1개의 답변

0 추천
RxJava에서 Kotlin Coroutines로 바꾼지가 좀 돼서, 기억이 좀 가물가물 하긴 한데...

님의 경우는 Stream에 해당하는 데이터가 없고, 그냥  Room에서 나오는 데이터베이스 쿼리 결과이므로 Single을 써도 충분할 것 같아 보이네요.  Stream이란 데이터 지속적으로 들어오는 걸 말합니다. 예를 들면, 동영상을 스트리밍한다라고 하잖아요? 동영상 데이터가 서버로부터 계속해서 들어오는거죠. 하지만 데이터베이스 처리는 결과는 한번만 오게 되어있죠.

다른 부분은 제가 보기에는 문제가 없어 보이는데요.
spark (227,530 포인트) 님이 2022년 2월 4일 답변
...