Поле массива обновления Firestore в документе - PullRequest
0 голосов
/ 13 июня 2018

У меня есть документ , как показано ниже, в моем документе есть Array .в массиве есть объектов .Как я могу обновить новый объект в массив.

Как вы видите ниже, я могу добавить документ в коллекцию с массивом, но при попытке обновить он выдает ошибку

java.lang.IllegalArgumentException: неверные данные.Неподдерживаемый тип: com.test.data.modal.Product

Что я пытался;

        var pid = ""
        btnAdd.setOnClickListener {
            val list = ArrayList<Product>()
            list.add(Product("u1", "1", 1))
            list.add(Product("u2", "2", 1))
            list.add(Product("u3", "3", 1))

            val testObject = TestObject("Talha", "Kosen", list)
            FirebaseFirestore.getInstance().collection("Test")
                    .add(testObject)
                    .addOnCompleteListener { task ->
                        pid = task.result.id
                    }
        }

        btnUpdate.setOnClickListener {
            val list = ArrayList<Product>()
            list.add(Product("u1", "1", 1))
            list.add(Product("u2", "2", 1))
            list.add(Product("u3", "3", 1))
            list.add(Product("u4", "4", 4))

            FirebaseFirestore.getInstance()
                    .collection("Test")
                    .document(pid)
                    .update("product", list)
        }

документ:

enter image description here

POJO:
@IgnoreExtraProperties
@Keep
class TestObject {

    var name: String = ""
    var surname: String = ""
    lateinit var productList: List<Product>

    constructor()

    constructor(name: String, surname: String, productList: List<Product>) {
        this.name = name
        this.surname = surname
        this.productList = productList
    }
}


@IgnoreExtraProperties
@Keep
class Product {
    var imagePath: String = ""
    var productUrl: String = ""
    var brand: Int = 0

    constructor()

    constructor(imagePath: String, productUrl: String, brand: Int) {
        this.imagePath = imagePath
        this.productUrl = productUrl
        this.brand = brand
    }
}

1 Ответ

0 голосов
/ 13 июня 2018

У меня, вероятно, нет ответа, но это может помочь:

  • Вы пытаетесь обновить с помощью ArrayList, но сохраняете список (в вашем TestObject)
  • См. Документациюобновить поля во вложенных объектах https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
  • Может быть хорошей идеей будет сохранить коллекцию в вашем документе TestObject вместо списка?Вы сможете легко обновить свои поля
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...