티스토리 뷰
MutableLiveData<MutableList<Photo>>
이런 타입의 라이브데이터를 사용하고싶었음
레포지토리 패턴을 사용함
레포지토리에서 아래와 같이 라이브데이터를 반환하는 함수를 만들었음

그리고 galleryDao는 로컬 DB에 접근해서 데이터 가져오는애임 아래와 같다 (room을 사용함)

암튼 이렇게 하고 viewModel에서 이 liveData를 업데이트하는 함수를 만듦

getPhotoFromLocal이라는 함수에서 레포지토리를 이용해가지고 라이브데이터를 반환받고 value꺼내서 값 업데이트 하고싶었음
근데 이렇게 하니깐 반환된 라이브데이터의 value가 null임
근데 반환된 라이브데이터는 null아님
찾아보니
https://github.com/android/architecture-components-samples/issues/44
Using getValue() on LiveData returns null with Room · Issue #44 · android/architecture-components-samples
I have a POJO set up for use with Room and retrofit @TypeConverters(DateConverter.class) @Entity(indices = {@Index("code")}) public class HealthcareCenter { @PrimaryKey @SerializedName("id") privat...
github.com

라이브데이터는 옵저버들 한테 값이 바뀌었다고 알려주는애
따라서 안에있는 값 자체가 필요한거면 이런식으로 반환하면 안된다는뜻인듯
명료하게 알지는 못하겠는데 대강 왜 안되는건지 알겠음. .. . .
그니간 라이브 데이터 객체 자체가 얘의 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를 통째로 갈아줘야되는듯함
'공부 > Android' 카테고리의 다른 글
DialogFragment 팁? (0) | 2023.07.02 |
---|---|
.mem: Background young concurrent copying GC freed 193995(11MB) AllocSpace objects, 0(0B) LOS objects, 28% free, 13MB/18MB, paused 6.774ms,5.016ms total 570.950ms (0) | 2023.06.23 |
socket.io 사용할때 뒤로가기 눌렀을때 앱 종료되는 이유? (0) | 2022.11.07 |
MPAndroidChart 안드로이드에서 그래프 그리기 (0) | 2022.11.03 |
배경 그라데이션 (0) | 2022.11.02 |