Функция Firebase onDataChange () занимает совсем другое время для запуска Android - PullRequest
0 голосов
/ 20 марта 2020

Я использую 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), я смотрел на сопрограммы, но не знаю, как использовать их в этом решении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...