如何始终在Firebase中存储/检索双打

时间:2019-04-20 19:18:14

标签: java firebase firebase-realtime-database

我想在Firebase中存储/检索双精度数,但是如果我存储5.0之类的整数,则Firebase会丢弃0,并且在检索时,我得到了从长到双的非法转换。一种解决方案是存储和解析字符串中的浮点值,但是Firebase表示它将支持double类型,因此,我希望尽可能使用它。

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 个答案:

答案 0 :(得分:1)

您可以要求SDK将其转换为特定类型:

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

但是,如果找不到该字段,则会崩溃,因此您可能需要在尝试转换之前检查它是否存在:

if (dataSnapshot.child(child).exists()) {
    double value = dataSnapshot.child(child).getValue(Double.class);
}

答案 1 :(得分:0)

这是因为firebase基本上将数字存储为firebase-realtime-database中的长整数或双精度数。如果数字是整数(不是数据类型),则将其存储为Long,否则将存储为Double。 Read more

要解决此问题,

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

希望这会有所帮助!