Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 在Kotlin中将长字符串转换为Int_Firebase_Kotlin_Casting_Google Cloud Firestore - Fatal编程技术网

Firebase 在Kotlin中将长字符串转换为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() 我有两个问题: 因为当我记

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”]时,它清楚地打印了一个int,编译器怎么知道它应该是一个长的呢
  • 有没有更简单的方法将“长字符串”转换为int

  • 编译器不知道它应该是长的。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基元值。