предотвратить возврат пустого значения, когда переменная не существует в базе данных - PullRequest
0 голосов
/ 20 марта 2020

У меня есть pojo, у которого есть набор значений

data class Product(val productId:String = "",val name:String = "", val image:String = "", val price: Int = 0, val hasDiscount:Boolean = false)

В firebase я иногда загружаю свой продукт с помощью hasDiscount, а иногда я не устанавливаю этот атрибут для продукта, в котором я наблюдаю по умолчанию Значение hasDiscount равно false, поэтому, когда я получаю свои данные из Firestore, я получаю значение NULL для этого поля, и тогда мой список продуктов не возвращается, и мой список не заполняется

suspend fun getProductList(shopId:String):Resource<MutableList<Product>>{
        val productList = mutableListOf<Product>()
        val snapshot = FirebaseFirestore.getInstance().collection("shops").document(shopId).collection("products").orderBy("hasDiscount",
            Query.Direction.DESCENDING).get().await()
        for(product in snapshot){
            val produdctId = product.id
            val productName = product.getString("name")!!
            val productImage = product.getString("image")!!
            val productPrice = product.getLong("price").toInt()!!
            val hasDiscount = product.getBoolean("hasDiscount")!! // here is my error, I'm assuming that this value is not null, but is null at the database, if I change my pojo with all ? as posible null values I also get the same here
            productList.add(Product(produdctId,productName,productImage,price,hasDiscount))
        }
        return Resource.Success(productList)
    }

Теперь, если я добавлю в мое пёйо всем приписывает? операнд, чтобы сказать, что каждое значение может быть нулевым, и удалить !! в getLong, string и т. д. в моем хранилище данных я не получу значение по умолчанию, которое я создал в моем POJO, вместо этого приходит null.

Итак, у меня есть продукт с productId, name, image, price, но hasCombo может быть или нет в базе данных, если эта переменная отсутствует в продукте, который я хочу вернуть false, не ноль, если эта переменная не найдена

EDIT

Использовал атрибут @Exclude для свойства, которые не всегда нужны продукту, но проблема сохраняется

EDIT 2

В некоторых продуктах в Firebase у меня нет поля hasDiscount, когда я получаю список продуктов и один У продукта нет этого поля. Я хочу вернуть false вместо нуля, так как в моем классе данных в качестве значения по умолчанию для поля у меня есть falseDisount

Если я сделаю это

   data class Product(val productId:String = "",val name:String = "", val image:String = "", val price: Int = 0, val hasDiscount:Boolean? = false)

и это

...
val hasDiscount = product.getBoolean("hasDiscount")
productList.add(Product(produdctId,productName,productImage,price,hasDiscount))

null также возвращается, и я не знаю, почему, поскольку я прямо сказал, что если hasCombo не является полем в документе, я хочу вернуть fa lse вместо null

1 Ответ

0 голосов
/ 20 марта 2020

Хорошо, поэтому я использовал троичный оператор, если значение равно нулю, просто верните значение по умолчанию, поэтому инициализация класса данных просто работает, чтобы пустой конструктор для Firebase использовал document.toObject(pojo::class.java), поэтому, если вы хотите чтобы вернуть значение по умолчанию для свойств, которые могут не являться полями вашего объекта в Firebase, выполните это

val hasDiscount = product.getBoolean("hasDiscount")?: false

, затем, если вы не используете toObject(), для него не требуется пустой конструктор

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