Как постоянно проверять, есть ли изменения в базе данных Firebase? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь создать многопользовательскую игру SOS с ручкой и бумагой, и я обнаружил в Интернете, что некоторые люди могут делать что-то подобное с помощью Firebase. Я попал в преграду и не могу найти для нее подходящего решения.

Как работает мое приложение в настоящий момент: игрок 1 может создать новую игру и входит в игровую активность, отображается код игры. Игрок 2 может присоединиться к игре, набрав код игры, который был сгенерирован, и присоединиться к игре, его / ее информация вставляется в базу данных. Моя проблема в том, что игрок 1, ожидая активности в игре, не имеет возможности узнать, присоединился ли игрок 2 к игре.

Я хочу знать, есть ли способ постоянно проверять базу данных, пока игрок 1 ожидает присоединения игрока 2. Я попробовал ondatachange, но обнаружил, что этот метод запускается только один раз, и мне нужен метод для непрерывной проверки / запуска или, по крайней мере, проверки, есть ли изменения в базе данных, если игрок 2 присоединился к игре.

Firebase Database Structure
Before Player 2 Joins
----
   Game
   |
   -------(Game Code)
               |
               ---------(Game Code)
               ---------(Player 1 Details)

After Player 2 Joins
----
   Game
   |
   -------(Game Code)
               |
               ---------(Game Code)
               ---------(Player 1 Details)
               ---------(Player 2 Details)

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Так как вы используете базу данных реального времени, а не Firestore. Вы можете узнать больше, прочитав эту страницу документации .

То, что вы ищете, выглядит примерно так:

val postListener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        // Get Post object and use the values to update the UI
        val post = dataSnapshot.getValue<Post>()
        // ...
    }

    override fun onCancelled(databaseError: DatabaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException())
        // ...
    }
}
postReference.addValueEventListener(postListener)

Где вы попросите слушателя сделать что-то вроде:

postReference.child("Game").child("Game Code").addValueEventListener(postListener)

И проверьте в своем слушателе, существует ли игрок 2. Код слушателя сработает только тогда, когда что-то изменится на облачной стороне Firebase. Поэтому при добавлении нового плеера будет вызван ваш код слушателя.

Надеюсь, это поможет.

0 голосов
/ 05 мая 2020

есть snapshotListeners для базы данных, ознакомьтесь с официальной документацией по адресу: https://firebase.google.com/docs/firestore/query-data/listen#kotlin + ktx

или посмотрите это видео на YouTube https://www.youtube.com/watch?v=-kre5cmoR8Q

счастливого взлома ..

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