База данных Firebase в реальном времени получает данные с помощью uid и помещает их в Varable kotlin android - PullRequest
0 голосов
/ 22 января 2020

Как получить данные из базы данных в реальном времени? Я хочу, чтобы пользователь определял c поиск данных по uid, ведьма также является дочерней по отношению к пользовательской базе данных. Мне нужно получить все данные для указанного c идентификатора пользователя "день", "месяц" и т. Д. c. значения в виде переменных.

Database structure

У меня есть данные в firebase, помещенные в:

DatabaseRow class:

data class DatabaseRow (
    val id:String = "",
    val names: String= "",
    val lastname: String="",
    val day: String="",
    val month: String="",
    val year:String=""
)

вход в firebase:

 val firebaseInput = DatabaseRow(user,names,lastname,day,month,year)
        userRef.child("$user").setValue(firebaseInput)

для извлечения данных я использую этот код:

  auth = FirebaseAuth.getInstance()
        FirebaseUser = auth.getCurrentUser()!!

        val uid = auth.getUid()!!

        val fireBase = FirebaseDatabase.getInstance()
        userRef = fireBase.getReference("users")
        val ordersRef = userRef.child("$uid").equalTo("$uid")


val valueEventListener = object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {
                for (ds in dataSnapshot.children) {
                    val username = ds.child("day").getValue(String::class.java)
                    Log.d("DataBaseGetName",username)
                    this@Main2Activity.testTextView.text = username 
                }
            }

            override fun onCancelled(databaseError: DatabaseError) {
                Log.d("Data", databaseError.getMessage()) //Don't ignore errors!
            }
        }
   ordersRef.addValueEventListener(valueEventListener)

, которые являются правилами базы данных:

{
  "rules": {
      ".read": true,
      ".write": true,
         "users":{
            "$uid":{
               ".write": "auth.uid === $uid",
               ".read": "auth.uid === $uid"
               },     
    "users":{
        ".indexOn": [".value","id","names","lastname","day","month","year"]
    },
   }
  }  
}  

1 Ответ

2 голосов
/ 22 января 2020

Когда вы получаете uid, вы пытаетесь сравнить его с базой данных uid. uid всегда отличается.

val ordersRef = userRef.child("$uid")
val valueEventListener = object : ValueEventListener {
    override fun onDataChange(dataSnapshot: DataSnapshot) {
        val username = dataSnapshot.child("names").getValue(String.class);
        Log.d("DataBaseGetName",username)
    }

    override fun onCancelled(databaseError: DatabaseError) {
        Log.d("Data", databaseError.getMessage()) //Don't ignore errors!
    }
}
ordersRef.addValueEventListener(valueEventListener)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...