Я использую Firebase с моим android. Я запускаю этот код, чтобы проверить, хранится ли в базе данных пользователь, который входит в систему с помощью Google:
val userRef = FirebaseDatabase.getInstance().getReference("users/${uidGoogleUser}")
Thread(Runnable {
userRef.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(p0: DataSnapshot) {
if (p0.exists()) {
val intent = Intent(this@LogInActivity, MainActivity::class.java)
startActivity(intent)
finish()
} else{
Log.d("onDataChange", "Does not exist")
val intent = Intent(this@LogInActivity, AddUsernameActivity::class.java)
startActivityForResult(intent, CHOOSE_USERNAME_REQUEST)
if (uidGoogleUser != "" && usernameGoogleUser != "") {
storeUserInDatabase(uidGoogleUser, usernameGoogleUser)
val intent = Intent(this@LogInActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
}
}
})
}).start()
Когда я запускаю эмулятор и нажимаю кнопку «войти в Google», требуется ДЕЙСТВИТЕЛЬНО много времени, прежде чем что-либо случится , Если я войду в систему и снова выйду из системы, а затем нажму кнопку «войти в систему с помощью Google», процесс входа в систему будет НАМНОГО быстрее, чем в первый раз. Почему это так?
У меня было много проблем с решением этой проблемы, и если кто-то получит совершенно другое представление о том, как я могу это сделать, поделитесь им. ListenForSingleValueEvent - это длительные операции, поэтому я запускаю его как поток (runnnable), я смотрел на сопрограммы, но не знаю, как использовать их в этом решении.