Я хотел бы хранить/извлекать двойные числа в 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




Это связано с тем, что firebase в основном хранит числа либо как long, либо как double в firebase-realtime-database. Если число является целым числом (не типом данных), оно будет сохранено как длинное, в противном случае оно будет сохранено как двойное.
Подробнее
Чтобы преодолеть эту проблему,
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());
}
Надеюсь это поможет!
Вы можете попросить SDK преобразовать его в определенный тип:
double value = dataSnapshot.child(child).getValue(Double.class);
Однако это приведет к сбою, если поле не будет найдено, поэтому вы можете проверить, существует ли оно, прежде чем пытаться его преобразовать:
if (dataSnapshot.child(child).exists()) {
double value = dataSnapshot.child(child).getValue(Double.class);
}