ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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에 통지된다.

     

     

    댓글

Designed by Tistory.