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.)