Преобразование длинной строки в Int в Kotlin - PullRequest
1 голос
/ 07 июня 2019

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. Есть ли более простой способ преобразовать "long-String" в int?

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

У меня были проблемы со значениями, которые обычно являются числами с плавающей запятой, но также могут быть целыми числами, недавно в проекте (для нашего разговора с нулями в приложении при вводе / выводе), и в итоге получили:

val amount = documents.data["item_cost"]
if (amount != null && amount is Number) {
    return String.format("%10.2f", amount.toDouble())
}

Таким образом, ключ здесь заключается в том, чтобы сначала убедиться, что значение равно Number, чтобы вы вызывали toDouble() для него.

0 голосов
/ 07 июня 2019

Компилятор не знает, что он должен быть длинным. Типы значений в карте docSnap просто печатаются как объекты. Вы обязаны либо предвидеть тип поля, либо проверять его во время выполнения.

Для языков Java / JVM:

  • Значения поля с плавающей запятой всегда возвращаются в SDK как объект типа Double.
  • Значения полей целочисленного типа: всегда , которые возвращаются в SDK как объект типа Long.

Вам нужно будет разобраться с ними такими, какие они есть, и преобразовать / преобразовать их, если они не того, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...