공부/Android
LiveData 의 value가 null을 반환할때
데자와 맛있다
2023. 5. 5. 20:20
MutableLiveData<MutableList<Photo>>
이런 타입의 라이브데이터를 사용하고싶었음
레포지토리 패턴을 사용함
레포지토리에서 아래와 같이 라이브데이터를 반환하는 함수를 만들었음
그리고 galleryDao는 로컬 DB에 접근해서 데이터 가져오는애임 아래와 같다 (room을 사용함)
암튼 이렇게 하고 viewModel에서 이 liveData를 업데이트하는 함수를 만듦
getPhotoFromLocal이라는 함수에서 레포지토리를 이용해가지고 라이브데이터를 반환받고 value꺼내서 값 업데이트 하고싶었음
근데 이렇게 하니깐 반환된 라이브데이터의 value가 null임
근데 반환된 라이브데이터는 null아님
찾아보니
https://github.com/android/architecture-components-samples/issues/44
라이브데이터는 옵저버들 한테 값이 바뀌었다고 알려주는애
따라서 안에있는 값 자체가 필요한거면 이런식으로 반환하면 안된다는뜻인듯
명료하게 알지는 못하겠는데 대강 왜 안되는건지 알겠음. .. . .
그니간 라이브 데이터 객체 자체가 얘의 value가 변경되면 알림을 보내는앤데 걔의 value를 내놔라 하니깐
아직 뭐 값 가져온것도 없는데 value내놔라 해서 안되는거인듯?
암튼 Dao에서 livedata로 가져와서 value를 꺼낸다는것이 잘못된 설계인듯
그래서 Dao에서 suspend해서 값을 가져오기로함
위처럼 바꾸니깐 잘됨
fun getPhotoFromLocal(){
viewModelScope.launch {
val newPhotos = GalleryRepository.get().getPhotos()
for(element in newPhotos){
_mutableLiveDataList.value?.add(element)
}
}
}
근데 이건 왜 안되는거임?
해보니깐 value를 통째로 갈아줘야되는듯함