Облачное хранилище файлов java.lang.IllegalArgumentException: неверные данные. Неподдерживаемый тип: - PullRequest
0 голосов
/ 07 сентября 2018

Я добавляю документ в коллекцию в Cloud Firestore Firebase и продолжаю получать это исключение:

java.lang.IllegalArgumentException: неверные данные. Неподдерживаемый тип: com.example.com.myproject.PickUpDate (находится в поле pick_up)

Я храню объект следующим образом:

private fun storeData() {
    val db = FirebaseFirestore.getInstance()
    val offerDocument = HashMap<String, Any?>()
    offerDocument.put(Key.CATEGORY, offer.category)
    offerDocument.put(Key.ITEM_TYPE, offer.itemType)
    offerDocument.put(Key.BRAND, offer.brand)
    offerDocument.put(Key.PRICE, offer.price)
    offerDocument.put(Key.PICK_UP_DATE, offer.pickUpPickUpDate)
    offerDocument.put(Key.AVAILABILITY, offer.availability)
    offerDocument.put(Key.COLOR, offer.color)

   offer.images =  adapter?.list?.map { it.toString() }
    offerDocument.put(Key.IMAGES, offer.images)


    // Add a new document with a generated ID
    db.collection("offers")
            .add(offerDocument)
            .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.id) }
            .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
}

И мой класс PickUpDate выглядит следующим образом:

data class PickUpDate(var year : Int, var month : Int, var day : Int){}

В чем может быть причина? Почему исключение выбрасывается специально для этого класса, а не для других?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Вы не показываете типы всех других полей, которые вы добавляете на карту, чтобы вставить в документ.Я предполагаю, что все они являются примитивными типами, такими как целые числа или строки.PickUpDate - это определенный вами пользовательский класс, а не один из стандартных типов, поддерживаемых для полей документа в Firestore.

Если вы хотите создать поле в документе, содержащем объект с тремя значениями, содержащимися вPickUpDate, вы можете поместить их в HashMap, а затем присвоить этот HashMap полю в документе:

val map = mapOf<String, Any>(
    "year" to offer.pickUpPickUpDate.year,
    "month" to offer.pickUpPickUpDate.month,
    "day" to offer.pickUpPickUpDate.day
)

offerDocument.put(Key.PICK_UP_DATE, map)

Или найти другой способ кодирования значений в вашем объекте в допустимое значение поля (например,отметка времени или одно число).

0 голосов
/ 07 сентября 2018

Вы получаете следующую ошибку:

java.lang.IllegalArgumentException: неверные данные.Неподдерживаемый тип: com.example.com.myproject.PickUpDate

Поскольку в Firestore нельзя присвоить свойству PICK_UP_DATE значение, которое не поддерживается типом данных .Ваш PickUpDate класс не поддерживается.Чтобы решить эту проблему, нужно изменить тип этого свойства на один из поддерживаемых.

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