从Firebase获得双倍优惠

时间:2017-09-15 07:25:24

标签: java android firebase firebase-realtime-database

我正在尝试使用dataSnapshot从firebase对象获取一个双精度但是每次我尝试时,我都会收到一个错误,说java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long并且当我尝试将它强制转换为Long时只是为了观察什么是我会得到这个错误 mDatabaseReference.child(mAuth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (!isPrinted) { System.out.println("Children" + dataSnapshot.getChildrenCount()); for (DataSnapshot snapshot : dataSnapshot.getChildren()) { Double price = (Double) snapshot.child("total").getValue(); System.out.println("Price: " + String.valueOf(price)); } isPrinted = true; } } @Override public void onCancelled(DatabaseError databaseError) { } }); ,所以简而言之,错误反之亦然。这是我用来在Firebase dataSnapshot中获取总数的代码:

double total = holder.quantity * price;
                   dataSnapshot.child(code).child("total").getRef().setValue(total);

这是我用来保存firebase总数的代码:

Double

我希望使用ClassCastException从firebase检索总数,但它会给我select XMLELEMENT("PERSONS", 。请帮助解决方案。 我也试过寻找http://jshint.com/docs/的解决方案,但没找到任何东西

这是我要查询的Firebase数据库:here

3 个答案:

答案 0 :(得分:2)

我想我可以从您的数据库截图中看到问题。您有一个total节点的值为" 5.16"。而另一个total的值是" 0" (我还假设您有更多total个节点,其值为" 0")。

所以,无论你做什么,你都会获得ClassCastException,因为" 5.16"被视为Double,而" 0"被视为Long - 并且您在同一查询中检索两者。

最简单的解决方案是改变你的" 0"到" 0.0"。这将使所有total个节点保持Double个值。然后,您只需调用以下内容来检索值: -

Double price = (Double) snapshot.child("total").getValue();

答案 1 :(得分:1)

我是新手,可能是错的,我今天遇到了同样的问题,我能找到的唯一解决方法就是这个。

// I am trying to convert the required data
// I use Kotlin Langauage

fun getData(snapshot: DataSnapshot) : Double{

    val a :Any? = snapshot.child("required_data").value

    val b : Double = if(a != null && a.toString() != "0"){ 
        a as Double
     } else 0.0
    return b
}

答案 2 :(得分:0)

这是因为0被视为并存储为Long,而不是Double。要使代码在两种情况下都能正常工作,请执行以下操作:

double val = 0;
Number num = (Number) snapshot.child("total").getValue();
if (num != null) {
    val = num.doubleValue();
}