Kotlin Flow를 사용한 회의실 데이터베이스
이번 블로그에서는 Android에서 Kotlin
Room Database
과 함께 Flow
를 사용하는 방법에 대해 알아보겠습니다. 기본 MVVM 아키텍처를 따르는 KotlinViewModel
을 사용하여 Flow
내부에 코드를 작성하는 방법을 배웁니다.이 문서는 원래 amitshekhar.me에 게시되었습니다.
구현 부분에 다음 프로젝트를 사용할 것입니다. 이 프로젝트는 단순성을 위해 기본 MVVM 아키텍처를 따릅니다. 프로젝트 자체에서 이 블로그에 언급된 구현을 위한 전체 코드를 찾을 수 있습니다.
GitHub 프로젝트: Learn Kotlin Flow
먼저 아래와 같이 룸 데이터베이스에 대한 종속성을 설정해야 합니다.
implementation "androidx.room:room-runtime:2.4.3"
kapt "androidx.room:room-compiler:2.4.3"
implementation "androidx.room:room-ktx:2.4.3"
참고: 항상 사용 가능한 최신 버전을 확인하십시오.
앱 수준 Gradle 파일에 주석 처리를 위한 Kotlin 플러그인을 추가하는 것을 잊지 마세요.
plugins {
id 'kotlin-kapt'
}
이제 아래와 같이 엔터티
data
클래스User
를 만듭니다.@Entity
data class User(
@PrimaryKey val id: Int,
@ColumnInfo(name = "name") val name: String?,
@ColumnInfo(name = "email") val email: String?,
@ColumnInfo(name = "avatar") val avatar: String?
)
이
User
엔터티 클래스의 경우 Room Database에 필요한 Dao
를 생성해야 하며 이름을 UserDao
로 지정합니다.@Dao
interface UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<User>
@Insert
fun insertAll(users: List<User>)
@Delete
fun delete(user: User)
}
이제
AppDatabase
를 확장하는 클래스RoomDatabase
를 만들어야 합니다.@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
그 후에
DatabaseBuilder
가 될 Singleton
클래스가 필요합니다.object DatabaseBuilder {
private var INSTANCE: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
if (INSTANCE == null) {
synchronized(AppDatabase::class) {
if (INSTANCE == null) {
INSTANCE = buildRoomDB(context)
}
}
}
return INSTANCE!!
}
private fun buildRoomDB(context: Context) =
Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"learn-kotlin-flow"
).build()
}
그런 다음
DatabaseHelper
인터페이스를 생성합니다.interface DatabaseHelper {
fun getUsers(): Flow<List<User>>
fun insertAll(users: List<User>): Flow<Unit>
}
그런 다음
DatabaseHelperImpl
인터페이스를 구현하는 클래스DatabaseHelper
를 만듭니다.class DatabaseHelperImpl(private val appDatabase: AppDatabase) : DatabaseHelper {
override fun getUsers(): Flow<List<User>> = flow {
emit(appDatabase.userDao().getAll())
}
override fun insertAll(users: List<User>): Flow<Unit> = flow {
appDatabase.userDao().insertAll(users)
emit(Unit)
}
}
여기서 반환 유형이
Flow
임을 이해해야 합니다. 또한 흐름 빌더를 사용하고 요구 사항에 따라 항목을 내보냅니다.이렇게 하면 아래와 같이
DatabaseHelper
의 인스턴스를 만들 수 있습니다.val dbHelper = DatabaseHelperImpl(DatabaseBuilder.getInstance(applicationContext))
마지막으로 이 인스턴스를 필요할 때마다 전달할 수 있습니다.
class RoomDBViewModel(private val apiHelper: ApiHelper, private val dbHelper: DatabaseHelper) : ViewModel() {
init {
fetchUsers()
}
private fun fetchUsers() {
viewModelScope.launch {
dbHelper.getUsers()
.flowOn(Dispatchers.IO)
.catch { e ->
// handle exception
}
.collect {
// list of users from the database
}
}
}
}
이렇게 하면 Android에서 Kotlin
ViewModel
을 사용하여 데이터베이스를 쿼리할 수 있습니다.Android에서 Kotlin
users
과 함께 Room Database를 사용하는 방법입니다.지금은 그게 다입니다.
감사
Amit Shekhar
다음에서 나와 연결할 수 있습니다.
Read all of my high-quality blogs here.
Reference
이 문제에 관하여(Kotlin Flow를 사용한 회의실 데이터베이스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amitiitbhu/room-database-with-kotlin-flow-4mm4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)