Как всегда хранить / получать двойники в Firebase - PullRequest
1 голос
/ 20 апреля 2019

Я хотел бы хранить / извлекать двойники в Firebase, но если я сохраню целое число, например, 5.0, Firebase сбросит 0, и после извлечения я получу недопустимое приведение от длинного к двойному. Одним из решений было бы хранить и анализировать значения с плавающей точкой из строк, но Firebase говорит, что будет поддерживать двойной тип, поэтому я бы предпочел использовать его, если это возможно.

double val = 1.0;
dbref.child(child).setValue(val); // '.0' dropped in db

double count = (double)dataSnapshot.child(child).getValue(); //illegal cast from long to double

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Вы можете попросить SDK преобразовать его в определенный тип:

double value = dataSnapshot.child(child).getValue(Double.class);

Однако, это приведет к сбою, если поле не найдено, поэтому вы можете проверить, существует ли оно, прежде чем пытаться преобразовать его:

if (dataSnapshot.child(child).exists()) {
    double value = dataSnapshot.child(child).getValue(Double.class);
}
0 голосов
/ 20 апреля 2019

Это потому, что firebase в основном хранит числа как длинные или двойные в firebase-realtime-database. Если число является целым числом (не типом данных), оно будет сохранено как Long, в противном случае оно будет сохранено как Double. Читать дальше

Чтобы преодолеть эту проблему,

double count = 0.0;
try{
    // stored data is exactly a double
    count = (double)dataSnapshot.child(child).getValue();
} catch (Exception ex) {
    // stored data is exactly an integer
    count = (double)((long)dataSnapshot.child(child).getValue());
}

Надеюсь, это поможет!

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