Firebase 在Kotlin中将长字符串转换为Int
Firestore将值保留为双倍值。没问题,我在Firestore中存储了一个Int,然后我尝试将其作为Int读回,如下所示:Firebase 在Kotlin中将长字符串转换为Int,firebase,kotlin,casting,google-cloud-firestore,Firebase,Kotlin,Casting,Google Cloud Firestore,Firestore将值保留为双倍值。没问题,我在Firestore中存储了一个Int,然后我尝试将其作为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"] as Int
当我这样做时,我得到了例外
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
所以我不得不这么做
(docSnap["myNumber"] as Long).toInt()
我有两个问题:
编译器不知道它应该是长的。docSnap映射中的值类型仅作为对象类型。您必须预测字段的类型,或者在运行时检查它 对于Java/JVM语言:
- 浮点字段值总是作为双类型对象返回SDK李>
- 整型字段值总是作为长类型对象返回SDK
您需要按原样处理这些值,如果它们不是您想要的,则转换/转换它们。我最近在一个项目中遇到了一些问题,这些值通常是浮点值,但也可能是整数(对于我们在I/O时的零对应用程序对话),结果是:
val amount = documents.data["item_cost"]
if (amount != null && amount is Number) {
return String.format("%10.2f", amount.toDouble())
}
因此,这里的关键是首先确保值是一个
数字
,这样您就可以对其调用toDouble()
。当您执行docSnap[“myNumber”]
时,您如何看待int
和long
之间的差异?someInt.toString()
和someLong.toString()
只要someLong
在int的范围内,就会给出相同的字符串。感谢您的回复,但我无法应用您的注释来更好地理解问题:为什么我在将字符串“9”转换为int时会遇到异常?为什么期待的时间很长?我问了一个关于你第一个问题的问题。你是说docSnap[“myNumber”]
显然是在打印一个int。这是什么意思?而且,as int
不会将字符串转换为int。toInt()
会这样做。谢谢你的回复,但我仍然不明白为什么当问题中的“number”是“9”就像错误消息所说的。你不能将long值强制转换为int。long不是int的子类。它是它自己的类型,你必须这样处理。这些是对象,nob基元值。