아래와 같은 오류가 나타났다. 스레드가 백스라운드에서 값이 변경되려고 해서 그런다고 한다.
E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1
Process: com.myungwoo.gettiming_app, PID: 30214
java.lang.IllegalStateException: Cannot invoke setValue on a background thread
at androidx.lifecycle.LiveData.assertMainThread(LiveData.java:487)
at androidx.lifecycle.LiveData.setValue(LiveData.java:306)
at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
at com.myungwoo.gettiming_app.viewModel.SelectViewModel$saveSelectedCoinList$1.invokeSuspend(SelectViewModel.kt:90)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@7a89ce3, Dispatchers.IO]
해결방법은 아래와 같다. 오류난 부분을 withContext(Dispatchers.Main){ } 이걸로 감싸주면 끝!
< 코드 >
withContext(Dispatchers.Main){
_save.value = "done"
}
'안드로이드앱' 카테고리의 다른 글
안드로이드 스튜디오 Sqlite 혹은 Room 파일 erd만들기 (0) | 2023.10.09 |
---|---|
SDK33 permission 외장메모리 AUDIO 승인 대응하기 (0) | 2023.10.06 |
ViewPage2_ImageSlide 뷰페이저2 자동 이미지 슬라이드 만들어보기 (0) | 2023.09.26 |
retrofit2.HttpException: HTTP 400 (0) | 2023.09.25 |
java.lang.IllegalStateException: Fragment ShopFragment not attached to a context 오류해결 (0) | 2023.09.04 |