Cloud Firestore java.lang.IllegalArgumentException:无效的数据。不支持的类型:

时间:2018-09-07 14:46:52

标签: java android firebase kotlin google-cloud-firestore

我正在将文档添加到Firebase的Cloud Firestore中的集合中,并不断收到此异常:

  

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 :(得分:1)

您遇到以下错误:

  

java.lang.IllegalArgumentException:无效的数据。不支持的类型:com.example.com.myproject.PickUpDate

由于在Firestore中,您无法将 supported data type以外的值分配给PICK_UP_DATE属性。您的PickUpDate类不是受支持的类。要解决此问题,您需要将该属性的类型更改为受支持的属性之一。

答案 1 :(得分:1)

您没有显示要添加到地图中以放入文档中的所有其他字段的类型。我的猜测是它们都是原始类型,例如整数或字符串。 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)

或者,找到其他方法将对象中的值编码为有效的字段值(例如时间戳或单个数字)。