[오류코드]
java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

해당 오류는 Main스레드에서 Room데이터베이스 접근에 시도했을때 발생하는 에러다.
안드로이드에서는 Main스레드에서 시간이 오래걸리는 작업을하면(데이터베이스에 접근하는것 등) Main스레드가 블록될수있기 때문에 피하는것을 권장한다.
Main스레드가 블록되면 앱이 꺼지는 큰오류가 발생할 수 있기 때문에, 사용자측면에서 굉장히 치명적이기 때문이다.
나는 ViewModel을 통해서 Room데이터베이스를 가져오는 코드를 작성했는데 이부분에서 해당 오류가 발생하였다.
viewModelScope를 사용해서 비동기적으로 Room데이터를 가져오는데, 해당 데이터를 가져올떄 Main스레드에서 실행되기 때문에 위와같은 오류가 발생한 것이였다.
// 수정전 코드
fun saveData(likeEntity: LikeEntity) = viewModelScope.launch {
shelterDao.insertData(likeEntity)
}
Dispatchers.IO로 설정해서 메인스레드가 아닌 IO스레드에서 데이터베이스를 받아오도록 수정했다.
// 수정 후 코드
fun saveData(likeEntity: LikeEntity) = viewModelScope.launch {
withContext(Dispatchers.IO){
shelterDao.insertData(likeEntity)
}
}
'개발 노트 > Kotlin' 카테고리의 다른 글
API key 연동시 인코딩 에러 (1) | 2024.10.16 |
---|---|
[API통신 에러]HTTP ROUTING ERROR (0) | 2024.10.06 |
[Android/Kotlin] odm.getFile: File not found.: /data/user/0/com.google.android.apps.messaging/files/httpft_pending: open failed: ENOENT (No such file or directory) 에러 (0) | 2024.08.26 |
[Android/Kotlin] Naver Map API 사용법 (2) | 2024.08.18 |
[Android] File google-services.json is missing 에러 (0) | 2024.08.17 |