#1 INSERT의 반환값
Room의 DAO의 어떤 메소드들은 Long 또는 List<Long>형 return을 가질 수 있다 (위 게시글의 #5-1 참조). 아래에 있는 샘플 앱을 수정하여 @Insert 어노테이션이 붙은 메소드의 return을 Long으로 두고, 해당 return을 화면에 표시하게 만들어본다.
#2 수정할 샘플 앱
위 게시글의 완성된 앱을 기반으로 수정을 가한다. "Save" 버튼을 누를 시, INSERT된 Entity의 기본키 id값을 Toast 메시지로 출력하게 만들어보겠다.
#3 코드 수정
#3-1 개요
View에 Toast 메시지를 표시하는 작업을 구현하기 위해, #3-3와 #3-4는 위 게시글에 기반하여 수정되었다.
#3-2 Repository (UserRepository.kt) 수정
// package com.example.insertionresponse.db
class UserRepository(private val dao: UserDAO) {
...
suspend fun insert2(user: User): Long {
return dao.insertUser2(user)
}
...
}
#3-3 ViewModel (UserViewModel.kt) 수정
...
class UserViewModel(private val repository: UserRepository) : ViewModel() {
...
private val _toastMessage = MutableLiveData<Event<String>>()
val toastMessage: LiveData<Event<String>>
get() = _toastMessage
init {
...
}
// 초기화 관련
...
// 버튼 클릭 시 동작
fun saveOrUpdate() {
if (isUpdateOrDelete) {
// Update 작업
TODO()
} else {
// Save 작업
insert2(inputtedUser.value!!)
clearInputBox()
}
}
...
// Repository 동작과 관련된 메소드들
...
fun insert2(user: User) = viewModelScope.launch(Dispatchers.IO) {
val insertedId = repository.insert2(user)
withContext(Dispatchers.Main) { // LiveData의 값 변경은 설계 상 Main 스레드에서만 실행되어야 함
if (-1 < insertedId) {
_toastMessage.value = Event("Inserted Id is $insertedId")
} else {
_toastMessage.value = Event("Insertion failed")
}
}
}
...
// 기타 UI 다듬기용 메소드들
...
}
#3-4 Activity (MainActivity.kt) 수정
...
class MainActivity : AppCompatActivity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
...
displayToastEvent()
}
...
private fun displayToastEvent() {
userViewModel.toastMessage.observe(this, Observer {
it.getContentIfNotHandled()?.let { // Only proceed if the event has never been handled
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
}
})
}
}
#4 작동 확인
#5 완성된 앱
'깨알 개념 > Android' 카테고리의 다른 글
[Android] Room - AutoMigrationSpec (0) | 2024.05.08 |
---|---|
[Android] Room - AutoMigration 기초 (0) | 2024.05.06 |
[Android] RecyclerView - notifyDataSetChanged() (0) | 2024.02.28 |
[Android] ViewModel - View에 Event 발생시키기 (0) | 2024.02.27 |
[Android] Room - UPDATE 연습 (0) | 2024.02.26 |