Я запускаю этот код, так как addListenerForSingleEvent
- это длительная операция:
CoroutineScope(IO).launch {
userRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
if (p0.exists()) {
withContext(Main) {
toggleLoading()
val intent = Intent(this@LogInActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
} else{
withContext(Main) {
var addUsernameIntent = Intent(this@LogInActivity,
AddUsernameActivity::class.java)
startActivityForResult(addUsernameIntent, CHOOSE_USERNAME_REQUEST)
}
}
}
})
}
Я получаю ошибку, когда пишу withContext(Main)
, которая говорит:
Функции приостановки можно вызвать только внутри тела сопрограммы
Но у меня есть тело сопрограммы, верно? Раньше у меня был Thread(runnable {..})
вместо процедуры, но я читал, что не должен делать намерений внутри какого-либо другого потока, кроме основного потока, поэтому я перешел на сопрограмму.