Firebase продолжает удалять все записи вместо только для определенной - PullRequest
0 голосов
/ 06 июня 2019

Я просто не могу удалить конкретную запись из моей Firebase: Изображение базы данных Firebase

Она всегда удаляет всю базу данных.

Я пробовал эти коды:

fun removeLobbyFromDatabase() {
    // lobbyId is string value of the key
    val query = db.child(lobbyId)

    query.addListenerForSingleValueEvent(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            snapshot.ref.removeValue()
        }

        override fun onCancelled(p0: DatabaseError) {}
    })
}

и

fun removeLobbyFromDatabase() {
    val ref = db.ref
    ref.child(lobbyId).removeValue()
}

(но тогда ничего не происходит)

fun removeLobbyFromDatabase() {
    db.addListenerForSingleValueEvent(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            snapshot.children.forEach { lobby -> if (lobby.key == lobbyId) lobby.ref.removeValue() }
        }

        override fun onCancelled(p0: DatabaseError) {}
    })
}

Откуда дБ отсюда (я используюКинжал 2):

    @Provides
    @Singleton
    fun getFirebaseRef(): DatabaseReference = 
    FirebaseDatabase.getInstance().getReference("lobbies")

Как я могу только удалить лобби (запись) и не всю базу данных?

>>> РЕДАКТИРОВАТЬ, РЕШЕНО <<< </strong>

Это очень смущает, но я заметил в отладчике, что obbyId был пуст.Затем я понял, что очистил эту строку в другом месте.Я был слишком уверен в этом.В любом случае, спасибо людям за то, что они приложили усилия, и этот код отлично сработал после решения моей ошибки:

fun removeLobbyFromDatabase() = db.child(lobbyId).removeValue()

Итак, если вы читаете здесь и столкнулись с той же проблемой, обязательно отлаживайте!

1 Ответ

0 голосов
/ 06 июня 2019

Чтобы удалить элемент из базы данных Firebase в реальном времени, нет необходимости подключать прослушиватель, вы можете просто вызвать функцию removeValue() непосредственно по ссылке, например так:

val rootRef = FirebaseDatabase.getInstance().getReference()
val lobbyIdRef = rootRef.child("lobbies").child("-LghCdSV-5HWF-tqoqiy")
lobbyIdRef.removeValue()

Вы также можете использовать addOnCompleteListener () , чтобы увидеть, когда операция удаления будет завершена.

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