-
1-3. Model클래스를 통하여 메모 데이터베이스 조작카테고리 없음 2021. 9. 14. 17:57
사용자 정의 RepositoryMemo.class
AndroidViewModel 내부의 멤버로 선언할 클래스이다.
데이터 베이스 생성때 앱의 private storage에 데이터베이스를 생성하므로 application context가 필요하여
생성자에 application context를 넣을 수 있는 application: Application을 선언하였다.
이 Application은 AndroidViewModel에서 getApplication메서드로 받아올 것이다.
import android.app.Application import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData class RepositoryMemo(val application: Application) { lateinit private var memoDB: MemoRoomDatabase private var mutableLiveMemos: MutableLiveData<List<Memo>> = MutableLiveData() var liveMemos: LiveData<List<Memo>> = mutableLiveMemos //AndroidViewModelMemoList 에서 Observing private fun getDatabase(application: Application) { this.memoDB = MemoRoomDatabase.getInstance(application) } fun destroyDatabase() { //worker thread val runnable: Runnable = object : Runnable { override fun run() { MemoRoomDatabase.destroyInstance() } } Thread(runnable).start() } fun querySelectAllDefault() { //worker thread val runnable: Runnable = object : Runnable { override fun run() { this@RepositoryMemo.getDatabase(application) //memoDB 초기화 mutableLiveMemos.postValue(memoDB.memoDao().querySelectAllDefault()) } } Thread(runnable).start() } }
LiveData는 observing이 가능한 데이터를 가진 클래스이다.
MutableLiveData<T> : LiveData<T>
MutableLiveData는 읽기,쓰기 가능하며 , LiveData는 읽기만 가능하다.
RepositoryMemo이외의 곳에서는 LiveData를 수정할 수 없도록 자기자신 내부에서는 MutableLiveData를 사용
이외의 곳에서는 읽기만 가능하도록 LiveData를 사용
Room데이터베이스 Dao의 쿼리 결과를 라이브 데이터에 저장한다.
AndroidViewModel에서 이 liveMemos 라이브 데이터를 옵져빙 할 것이며
데이터가 갱신되면 AndroidViewModel에 통지된다.