我正在将文档添加到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){}
可能是什么原因?为什么在该类而不是其他类上专门抛出异常?
答案 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)
或者,找到其他方法将对象中的值编码为有效的字段值(例如时间戳或单个数字)。