-
Notifications
You must be signed in to change notification settings - Fork 0
Issue #15
room에서 저장된 정보의 일부 field만 update 하는 것은 dao에서 @Update를 하거나, @Query 어노테이션으로 ("UPDATE daily SET dailymemo = :memo WHERE id = :id") 를 추가해 줘도 된다. table name = daily, field = dailymemo, id는 그 정보의 id가 된다. 그런데 계속 고민한 문제는, repository에는 모두 suspend로 함수를 선언해 놓았고, 이건 main thread가 아닌 coroutine에서 실행되도록 viewmodel에도 viewModelScope.launch{} 로 설정이 되어 있는데 field를 update하고 바로 그 update한 값을 가져올 수 있느냐였다. 단순하게 viewmodel에서 update 후 select를 해서 가져오면 절대 update된 항목이 가져와지지 않는다. 서로 다른 thread에서 돌고 있으니 update가 되기 전에 아마 select가 되는 것처럼 보인다. (방금 든 생각 : repository suspend 함수 안에 update와 select를 동기식으로 같이 넣은 함수를 만들어서 실행시키면 되지 않을까?) 일단 해결은 viewmodel에서 room의 정보를 update 해줄 때 직접 viewmodel에서 observe하고 있는 객체도 직접 update된 값으로 변경해주도록 하였다. 그닥 돌아가는 과정도 아니고 오히려 room에 들러서 값을 가져오는 것보다 바로 변수를 변경해준 것이기 때문에 더 빠르지 않을까라는 생각도 든다. 화면에 보여지는 값은 실제 room에 있는 값이 아니라 직접 추가한 값이지만 어차피 room이나 observe 당하는 객체나 같은 값으로 변경해주었기 때문에 문제가 없지 않을까 한다.
다른 페이지에서 update 한 값이 해당 페이지에서 나타나야 하므로 activityviewmodel()로 viewmodel을 공유하였다.