[Error] Method setCurrentState must be called on the main thread

Minji Jeongยท2022๋…„ 5์›” 11์ผ
0

Troubleshooting

๋ชฉ๋ก ๋ณด๊ธฐ
1/23
post-thumbnail

๋ฌธ์ œ

private val coroutineScope by lazy { CoroutineScope(Dispatcher.IO) }
private val infoSaveModule : DataStoreModule by inject() 

coroutineScope.launch {
	infoSaveModule.setData(1)
    Navigation.findNavController(binding.root).navigate(R.id.action)
}                         

์ฝ”๋ฃจํ‹ด ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ Jetpack Navigation์„ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

ํ•ด๊ฒฐ

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ Navigation์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ฝ”๋ฃจํ‹ด ์Šค์ฝ”ํ”„์˜ ์Šค๋ ˆ๋“œํ’€์„ ๋ฉ”์ธ์Šค๋ ˆ๋“œ๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ž์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜์ž.

1. ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ Navigation ์‚ฌ์šฉ

class MainFragment : Fragment() {
	private val coroutineScope by lazy { CoroutineScope(Dispatcher.IO) }
	private val infoSaveModule : DataStoreModule by inject() 

	private fun login(){
		...
		coroutineScope.launch {
			infoSaveModule.setData(1)
		}   
    	...
   	    Navigation.findNavController(binding.root).navigate(R.id.action)
	}
}
2. ์ฝ”๋ฃจํ‹ด ์Šค์ฝ”ํ”„์˜ ์Šค๋ ˆ๋“œํ’€์„ ๋ฉ”์ธ์Šค๋ ˆ๋“œ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉ

class MainFragment : Fragment() {
	private val coroutineScope by lazy { CoroutineScope(Dispatcher.Main) }
	private val infoSaveModule : DataStoreModule by inject() 
    ...
}

References

https://stackoverflow.com/questions/71329556/method-setcurrentstate-must-be-called-on-the-main-thread-android-kotlin

profile
Software Engineer

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด