Я разрабатываю приложение для Android с Kotlin, и я пытаюсь получить ссылку на документ из Firestore - PullRequest
2 голосов
/ 31 октября 2019

Я занимаюсь разработкой нативного приложения для Android с Kotlin и Firebase, у меня есть коллекция с именем Topic и 2 поля с типом ссылки: одно для пользователя и другое для категории, я пытался получить все документы также со справочным документом, ноКажется, он не работает:

db.collection("topic").get().addOnSuccessListener { result ->
        for (document in result) {
            Log.e("success", "${document.id} => ${document.data.get("subject")}")
            var topic: Topic = Topic(
                document.id as String,
                document.data.get("subject") as String,
                document.data.get("content") as String,
                document.data.get("created_at") as String,
                document.getDocumentReference("Category") as Category,
                document.getDocumentReference("User") as User
            )}

Нет ошибок, но и нет результатов в моей печати (тема).

Это класс темы

class Topic : Serializable {
    var id : String = ""
    var subject : String = ""
    var content : String = ""
    var created_at : String = ""
    var cat = Category()
    var user = User()

    constructor(){}

    constructor(
        id: String,
        subject: String,
        content: String,
        created_at: String,
        cat: Category,
        user: User
    ) {
        this.id = id
        this.subject = subject
        this.content = content
        this.created_at = created_at
        this.cat = cat
        this.user = user
    }

    override fun toString(): String {
        return "Topic(id='$id', subject='$subject', content='$content', created_at='$created_at', cat=$cat, user=$user)"
    }
}

Database

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Когда вы используете следующую строку кода:

document.getDocumentReference("Category") as Category

Вы получаете объект типа DocumentReference и , а не объект типа Category, потому что DocumentSnapshot's getDocumentReference () метод возвращает объект такого типа. Помните, что в Kotlin нет никакого способа, которым вы можете привести объект типа DocumentReference к Category, следовательно, такое поведение.

Таким образом, предположение, что простое получение ссылки на объект вернет сам объект не правильно. Единственный способ решить эту проблему - это сделать отдельные вызовы для каждого из них, как @FrankvanPuffelen упомянул в своем ответе.

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

1 голос
/ 31 октября 2019

Вы должны будете получить каждый ссылочный документ явно с отдельным вызовом get(). Там нет никакого способа, чтобы получить их автоматически в вашем текущем звонке.

Так что-то вроде:

db.collection("topic").get().addOnSuccessListener { result ->
    for (document in result) {
        document.getDocumentReference("Category").get().addOnSuccessListener { categoryDoc ->
            let category = categoryDoc.data as Category
            ...
        }
    }
}

Также смотрите:

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