получить все идентификаторы пользователей из shaver1, а затем получить информацию о каждом пользователе из музеев - PullRequest
0 голосов
/ 21 июня 2019

Как получить все идентификаторы пользователей из shaver1, а затем получить информацию о каждом пользователе из musers?

Вот моя структура базы данных: here is my firebase structure

mDatabaseReference = mDatabase!!.getReference().child("Jobs").child(input_job.selectedItem.toString())

mDatabaseReference!!.addChildEventListener(object:ChildEventListener  {
    override fun onCancelled(p0: DatabaseError) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onChildMoved(p0: DataSnapshot, p1: String?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onChildChanged(p0: DataSnapshot, p1: String?) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onChildAdded(p0: DataSnapshot, p1: String?) {
        var userId=p0.getValue().toString()
        UserIdsResult.add(userId)
        // val map = p0.getValue() as Map<String, Any>
    }

Ответы [ 2 ]

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

Чтобы иметь возможность получить идентификаторы пользователей в вашем узле Shaver1, а затем получить имя своих пользователей, используйте следующие строки кода:

val rootRef = FirebaseDatabase.getInstance().reference
val shaverRef = rootRef.child("Jobs").child("Shaver1")
val valueEventListener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        for (ds in dataSnapshot.children) {
            val uid = ds.getValue(String::class.java)

            val usersRef = rootRef.child("MUsers").child(uid)
            val eventListener = object : ValueEventListener {
                override fun onDataChange(dataSnapshot: DataSnapshot) {
                    val name = dataSnapshot.child("Name").getValue(String::class.java)
                    Log.d(TAG, name)
                }

                override fun onCancelled(databaseError: DatabaseError) {
                    Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
                }
            }
            usersRef.addListenerForSingleValueEvent(eventListener)
        }
    }

    override fun onCancelled(databaseError: DatabaseError) {
        Log.d(TAG, databaseError.getMessage()) //Don't ignore errors!
    }
}
shaverRef.addListenerForSingleValueEvent(valueEventListener)
0 голосов
/ 21 июня 2019

Попробуйте следующее:

mDatabaseReference = mDatabase!!.getReference().child("Jobs");

mUserReference = mDatabase!!.getReference().child("MUsers");

    mDatabaseReference.addValueEventListener(object : ValueEventListener {

        override fun onCancelled(error: FirebaseError?) {
            println(error!!.message)
        }

        override fun onDataChange(snapshot: DataSnapshot?) {
            val children = snapshot!!.children
            children.forEach {
                  val keys   = it.getKey()
                  val userId = it.child(keys).getValue().toString()

                  mUserReference.child(userId).addListenerForSingleValueEvent(object : ValueEventListener {

                    override fun onCancelled(error: FirebaseError?) {
                        println(error!!.message)
                    }

                    override fun onDataChange(snapshot: DataSnapshot?) {
                          val name = snapshot.child("Name").getValue().toString();  
                   }
                })  
            }
        }
    })

Сначала добавьте ссылку на дочерний элемент Jobs, затем с помощью forEach вы можете выполнить итерацию внутри него и получить ключи getKey() и userIds.

Затем добавьте ссылку на child MUsers, используйте child(userId) и получите данные.

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