Firestore将值保留为双精度值。没问题,我将一个Int存储到Firestore中,然后尝试像这样将它读为Int:
docSnap["myNumber"] as Int
我收到例外情况
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
所以我必须做
(docSnap["myNumber"] as Long).toInt()
我有两个问题:
docSnap["myNumber"]
以来,它清楚地打印了一个int,编译器怎么知道它应该很长?答案 0 :(得分:0)
编译器不知道它应该很长。 docSnap Map中的值类型仅被键入为对象。您必须预先确定字段的类型,或者在运行时进行检查。
对于Java / JVM语言:
您需要按原样处理它们,如果不是您想要的,则进行转换/转换。
答案 1 :(得分:0)
在最近的一个项目中(对于我们在I / O的零应用对话),我遇到的问题通常是浮点数,但也可能是整数,最后出现了:
val amount = documents.data["item_cost"]
if (amount != null && amount is Number) {
return String.format("%10.2f", amount.toDouble())
}
所以这里的关键是首先确保值是Number
,以便您在其上调用toDouble()
。