Создавайте уникальные заметки для пользователей - PullRequest
0 голосов
/ 26 марта 2019

Реализовано в приложении firebase аутентификация. А также возможность добавлять и удалять записи. Но когда я захожу с другим аккаунтом, записи везде одинаковые.

В: как я могу создать свои собственные записи для каждого авторизованного пользователя?

Теперь что-то вроде этого:

enter image description here

Как я понял из комментария, мне нужно добавить еще одно поле в мою структуру: "пользователи". И в конечном итоге получить тип target-list - > users - > targets

Но, например, в своей основной деятельности я выбираю следующее: databaseReference = FirebaseDatabase.getInstance().getReference("targets")

Как я понимаю, здесь нужно изменить структуру?

UPD : Я пытался к следующему:

private fun updateListData() {
    val uid = FirebaseAuth.getInstance().currentUser?.uid ?: ""
    databaseReference = FirebaseDatabase.getInstance().getReference("targets").child(uid)
    getTargetsFromDb()
}

и в getTargetsFromDb ():

private fun getTargetsFromDb() {
    databaseReference?.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            for (targetSnapshot in dataSnapshot.children) {
                val target = targetSnapshot.getValue(Target::class.java)
                target?.let { targetList.add(it) }
            }
            recyclerView?.adapter = adapter
        }

        override fun onCancelled(databaseError: DatabaseError) {
            Log.d("some", "Error trying to get targets for ${databaseError.message}")
        }
    })
}

И получите следующую структуру:

enter image description here

1 Ответ

0 голосов
/ 26 марта 2019

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

Firebase-root
  |
  --- targets
       |
       --- uid
            |
            --- pushedId
            |    |
            |    --- description: "some description"
            |    |
            |    --- name: "Vadim"
            |
            --- pushedId
                 |
                 --- description: "another description"
                 |
                 --- name: "Morozov"

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

val uid = FirebaseAuth.getInstance().currentUser!!.uid
val rootRef = FirebaseDatabase.getInstance().getReference()
val uidRef = rootRef.child("targets").child(uid)
uidRef.addListenerForSingleValueEvent(/* ... */);

Альтернативная структура базы данных может быть:

Firebase-root
  |
  --- targets
        |
        --- pushedId
        |    |
        |    --- description: "some description"
        |    |
        |    --- name: "Vadim"
        |    |
        |    --- uid: "VDMQ ... 0nw1"
        |
        --- pushedId
             |
             --- description: "another description"
             |
             --- name: "Svetlana"
             |
             --- uid: "eluk ... PJu1"

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

val uid = FirebaseAuth.getInstance().currentUser!!.uid
val rootRef = FirebaseDatabase.getInstance().getReference()
val targetsRef = rootRef.child("targets").orderByChild("uid").equalTo(uid)
targetsRef.addListenerForSingleValueEvent(/* ... */);

Так что вам решать, какой из них лучше для вас.

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