Хобрук: Ваш путь к мастерству в программировании

Как получить данные из базы данных Firebase с помощью Kotlin?

Это модель, которую я загружаю в Firebase:

public class OnlineMatch{

private User user1;
private User user2;

public OnlineMatch(User firstPlayer, User secondPlayer) {
        this.user1 = firstPlayer;
        this.user2 = secondPlayer;
    }

}

Затем я отправляю данные в Firebase таким образом (kotlin):

 fun createMatch(match: OnlineMatch) {
        val matchList = database.child("multiplayer").push()
        matchList.setValue(match)
    }

Таким образом, моя структура БД следующая:

введите описание изображения здесь Если я разверну узел, я прекрасно вижу свои объекты: OnlineMatch (User1, User2)

Теперь я хотел бы запросить базу данных и получить ArrayList '‹' OnlineMatch '>'. Я уже нашел документы Firebase, но не нашел ничего полезного. Как я могу сделать? Заранее спасибо.


  • Я хотел бы добавить, что у моего класса OnlineMatch есть правильный сеттер / получатель, написанный в соответствии с соглашением Java (camelCase): setUser1, getUser1 ecc 02.08.2017

Ответы:


1

Вы не нашли ничего полезного, потому что при запросе к базе данных Firebase вы получаете Map, а не ArrayList. Все в Firebase структурировано как пары ключ и значение. Когда дело доходит до Firebase, использование ArrayList - это антипаттерн. Одна из многих причин, по которым Firebase не рекомендует использовать массивы, заключается в том, что это делает невозможным запись правил безопасности.

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

val onlineMatch = OnlineMatch() //Creating an obect of OnlineMatch class
onlineMatch.user1 = userObject //Setting the userObject to the user1 field of OnlineMatch class
//onlineMatch.setUser(userObject)

Как вы, наверное, заметили, я прокомментировал последнюю строку, потому что нет необходимости использовать сеттер для установки userObject.

И очень важно, не забудьте добавить the no argument constructor в свой OnlineMatch класс, который необходим для Firebase.

public OnlineMatch() {}

Изменить:

Чтобы получить данные, просто поместите слушателя на желаемый узел и получите данные из объекта dataSnapshot в HashMap.

val map = HashMap<String, OnlineMatch>()

Затем просто перебирайте HashMap следующим образом:

for ((userId, userObject) in map) {
    //do what you want with them
}

Или просто используйте приведенный ниже код:

val rootRef = firebase.child("multiplayer")
rootRef.addListenerForSingleValueEvent(object : ValueEventListener {
    override fun onCancelled(error: FirebaseError?) {
        println(error!!.message)
    }

    override fun onDataChange(snapshot: DataSnapshot?) {
        val children = snapshot!!.children
        children.forEach {
            println(it.toString())
        }
    }
})

Надеюсь, поможет.

02.08.2017
  • Спасибо @Alex Mamo, но у меня все еще проблемы. Как я могу получить HashMap ‹String, OnlineMatch›? PS: спасибо за подсказки Kotlin, и да, у меня есть пустой конструктор. 02.08.2017
  • Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..