Flow의 예제를 살펴보다 보면 종종 ROOM과 같이 사용하는 것을 볼 수 있습니다.
왜 이렇게 같이 사용하고 어떻게 사용할까요?
설명을 한번 보도록 하겠습니다.
Coroutines support in Room has been increasing at every release: Room 2.1 added coroutines support for one-shot read / write operations and with Room 2.2 we now have support for observable reads with Flow enabling you to get notified of changes in your database.
Start getting notified of the changes in your database by using observable reads with Flow! Together with other coroutines support added in Jetpack libraries like lifecycle-aware coroutine scopes, suspend lifecycle-aware coroutines or the transformation from Flow to LiveData, you can now use coroutines and Flow throughout your entire application.
일단 기본적으로 ROOM 데이터베이스를 이용하는 방법을 한번 살펴보겠습니다.
아래와 같이 코드를 작성해줄 수 있습니다.
id 'kotlin-kapt'
// ROOM
def roomVersion = "2.4.0"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
// To use Kotlin annotation processing tool (kapt)
kapt("androidx.room:room-compiler:$roomVersion")
// Coroutine
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0")
// optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:$roomVersion")
// ViewModelScope
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1")
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.5.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.4.0"
class MainActivity : AppCompatActivity() {
lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
findViewById<Button>(R.id.insert).setOnClickListener {
viewModel.add("aa")
}
// viewModel.readAllData.observe(this, androidx.lifecycle.Observer {
// Log.d("DATA", it.toString())
// })
lifecycle.coroutineScope.launch {
viewModel.readData().collect() {
Log.d("DATA2", it.toString())
}
}
// lifecycle.coroutineScope.
}
}
class MainViewModel(application: Application) : AndroidViewModel(application) {
// var readAllData : LiveData<List<TextEntity>>
val context = getApplication<Application>().applicationContext
val db = TextDatabase.getDatabase(context)
// init {
// readAllData = db.textDao().getAllData().asLiveData()
// }
fun add(text : String) = viewModelScope.launch(Dispatchers.IO) {
db.textDao().insert(TextEntity(0, text))
}
fun readData() : Flow<List<TextEntity>> = db.textDao().getAllData()
}
기본적인 room 코드입니다.
여기에서 Main에서 flow를 관찰해줄 수 있고
lifecycle.coroutineScope.launch {
viewModel.readData().collect() {
Log.d("DATA2", it.toString())
}
}
ViewModel에서 asLiveData로 관찰해줄 수 있습니다.
// var readAllData : LiveData<List<TextEntity>>
// init {
// readAllData = db.textDao().getAllData().asLiveData()
// }
- 참조
https://developer.android.com/codelabs/basic-android-kotlin-training-intro-room-flow#8
Room 및 Flow 소개 | Android Developers
관계형 데이터베이스의 기본사항을 알아보고 Android 스튜디오에서 Database Inspector로 SQL 쿼리 실행을 연습합니다.
developer.android.com
https://medium.com/@lukaszburcon/flow-and-livedata-in-mvvm-architecture-6f8879b96ce0
Flow and LiveData in MVVM architecture
LiveData, Flow and Channels in a modern Android MVVM architecture
medium.com
https://github.com/HanYeop/AndroidStudio-Practice/tree/master/RoomEx
GitHub - HanYeop/AndroidStudio-Practice: (~2021.05.20) 안드로이드 학습 내용 저장소
(~2021.05.20) 안드로이드 학습 내용 저장소. Contribute to HanYeop/AndroidStudio-Practice development by creating an account on GitHub.
github.com
https://tourspace.tistory.com/342
[Android, MVVM, Coroutine] 활용 #2 - Room에서 Coroutine 사용
이전 포스팅에서 Android에서 Coroutine이 사용 가능하도록 설정 된 상태라면 Room에서 coroutine을 이용한 DB 접근방법에 대해서 알아봅니다. 상세내용이 담긴 포스팅 2019/11/25 - [개발이야기/Android] - Andr
tourspace.tistory.com
https://medium.com/androiddevelopers/room-flow-273acffe5b57
Room 🔗 Flow
Coroutines support in Room has been increasing at every release: Room 2.1 added coroutines support for one-shot read / write operations and…
medium.com
https://hungseong.tistory.com/33
[Android, Kotlin] Room DB에서 Flow를 사용하여 DB 변경 observing
조건 : 찜한 글 목록에서 글 클릭 -> 클릭한 글의 detail 화면에서 찜 해제 시 DB에서 찜한 글 목록이 바로 업데이트 됨 -> 다시 찜한 글 목록으로 돌아왔을 때 업데이트 된 찜한 글 목록이 나오도록
hungseong.tistory.com
'Android Jetpack' 카테고리의 다른 글
ROOM + FLOW CRUD - 2 (0) | 2022.07.11 |
---|---|
ROOM + FLOW CRUD - 1 (0) | 2022.07.03 |
Coroutine flow (0) | 2022.06.19 |
WorkManager 고유작업 (0) | 2022.05.15 |
WorkManager 주기적 실행 (0) | 2022.05.02 |