在Kotlin中将长字符串转换为Int

时间:2019-06-07 18:27:05

标签: firebase kotlin casting google-cloud-firestore

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()

我有两个问题:

  1. 自从我登录docSnap["myNumber"]以来,它清楚地打印了一个int,编译器怎么知道它应该很长?
  2. 是否有更简单的方法将“长字符串”转换为int?

2 个答案:

答案 0 :(得分:0)

编译器不知道它应该很长。 docSnap Map中的值类型仅被键入为对象。您必须预先确定字段的类型,或者在运行时进行检查。

对于Java / JVM语言:

  • 浮点字段值总是 会作为Double类型对象返回到SDK。
  • 整数类型字段的值总是 作为Long类型对象返回到SDK。

您需要按原样处理它们,如果不是您想要的,则进行转换/转换。

答案 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()