본문 바로가기
개발/Android

[Android] 스마트폰 내장 DB를 사용하기 위한 Room 2탄

by tempus 2021. 8. 13.
반응형

🔶 Repository와 MVVM에서 사용

이제 우리가 만든 Room DB를 실제적으로 사용할 수 있게 Repository를 만들어 봅시다. 이때 주의할 점은 Room DB가 메인 스레드에서 접근하려면 하면 에러가 납니다. 그래서 별도의 스레드를 사용해야 합니다. 그래서 비동기 처리를 위해 코루틴을 적용했습니다.


class UserRepository(application: Application) {

    private val userDatabase = UserDatabase.getInstance(application)!!
    private val userDao: UserDao = contactDatabase.userDao()
    private val users: LiveData<List<User>> = userDao.getAll()

    fun getAll(): LiveData<List<User>> {
        return users
    }

    fun insert(user: User) {
        try {
             CoroutineScope(IO).launch {
                userDao.insert(user)
            })
        } catch (e: Exception) { }
    }

    fun delete(user: User) {
        try {
            CoroutineScope(IO).launch {
                userDao.delete(user)
            })
        } catch (e: Exception) { }
    }

}

이제 만든 Repository를 MVVM 패턴에서 사용해 보자. ViewModel과 Activity를 만들어 줍니다.

UserViewModel.kt


class UserViewModel(application: Application) : AndroidViewModel(application) {

    private val repository = UserRepository(application)
    private val users = repository.getAll()

    fun getAll() : LiveData<List<User>>{
        return this.users
    }

    fun insert(user : User){
        repository.insert(user)
    }

    fun delete(user : User){
        repository.delete(user)
    }
}

MainActivity.kt


class MainActivity : AppCompatActivity() {

    private lateinit var userViewModel: UserViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        userViewModel = ViewModelProviders.of(this).get(UserViewModel::class.java)
        userViewModel.getAll().observe(this, Observer<List<User>> { users ->
                // Update UI
            })
    }

}

위와 같은 방식으로 Room을 적용해서 사용할 수 있습니다.

 

반응형

댓글


loading