Firebase: любой способ определить «любой» узел? - PullRequest
0 голосов
/ 22 апреля 2019

Хорошо, вот как выглядит моя база данных Fireabse:

enter image description here Теперь мне нужно обновить узел "about" для каждого пользователя. Без пользовательского узла вот что я бы сделал:

    val mAllUserDatabase : DatabaseReference  = FirebaseDatabase.getInstance().reference.child("Users"))

    val childUpdates = HashMap<String, Any>()
    childUpdates["/about"] = "new value"

    mAllUserDatabase.updateChildren(childUpdates)

Проблема в том, что мне нужно определить узел пользователя (не так ли?). Но поскольку все пользовательские узлы имеют разные имена, мне нужно что-то вроде «any-node» или «all node». Что-то вроде

    childUpdates["/any/about"] = "new value"

или getChildren() снимков.

Каков наилучший способ решить эту проблему? Нужно ли использовать addListenerForSingleValueEvent для чтения имен всех узлов, а затем использовать имена на mAllUserDatabase с .updateChildren(childUpdates)? Это не может быть лучшим способом сделать это.

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Чтобы обновить свойство about во всех пользовательских объектах, используйте следующие строки кода:

val rootRef = FirebaseDatabase.getInstance().reference
val usersRef = rootRef.child("Users")
val valueEventListener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        for (ds in dataSnapshot.children) {
            val childUpdates = HashMap<String, Any>()
            childUpdates["about"] = "yourNewAboutValue"
            ds.ref.updateChildren(childUpdates)
        }
    }

    override fun onCancelled(databaseError: DatabaseError) {
        Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
    }
}
usersRef.addListenerForSingleValueEvent(valueEventListener)
1 голос
/ 22 апреля 2019

Чтобы записать значение в узел в базе данных Firebase Realtime, вам нужно знать точный путь к этому узлу. Firebase не имеет понятия запросов на обновление SQL.

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

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