반응형
안드로이드를 개발할 때 요즘 많이들 livedata를 사용한다.
state관리에도 용이하고 UI를 즉각 반영할 때도 좋다
livedata를 다루는 여러 가지 기술도 있지만 오늘은 setValue postValue 에 대한 기록을 남기려고 한다.
내가 겪은 코드는 아래와 같다
Cannot invoke setValue on a background thread |
백그라운드 쓰레드에서 setVlaue를 호출 할 수 없습니다 :(
setValue
setValue는 MainThread에서 동작하는 방식이다.
// viewModel
private val _textStr: MutableLiveData<String> = MutableLiveData()
val textStr: LiveData<String>
get() = _textStr
...
_textStr.value = "네트워크 통신을 통해 받은 값"
//layout.xml
android:text="@{viewModel.textStr}"
내가 요청한 setValue는 네트워크 통신을 마치고 그 결과값을 value에 넣는 방식이었다.
그렇기 때문에 백그라운드 쓰레드 내에서 동작하게 되었고 위와같은 에러를 발생시켰다.
postValue
// viewModel
private val _textStr: MutableLiveData<String> = MutableLiveData()
val textStr: LiveData<String>
get() = _textStr
...
_textStr.postValue("네트워크 통신을 통해 받은 값")
//layout.xml
android:text="@{viewModel.textStr}"
postValue는 백그라운드 쓰레드에서 동작하는 값 변경 메소드다
따라서 백그라운드 쓰레드에서 동작 시키려면 위와 같이 postValue를 사용하면 된다 :)
반응형
'Develop > Android' 카테고리의 다른 글
Android EditText 특수문자 제어, NextFocus, 엔터키 처리 (0) | 2022.12.26 |
---|---|
Fragment Commit, CommitAllowingStateLoss 그리고 재현방법 (0) | 2022.11.23 |
Compose Camp! (0) | 2022.11.08 |
Android - Toast가 중첩되어 보여질 때 (0) | 2022.10.19 |
Android - java.lang.IllegalArgumentException: No suitable parent found from the given view. Please provide a valid view (0) | 2022.09.28 |