得到双倍从火力地堡

问题描述:

我想从使用dataSnapshot但每次我尝试,我得到一个错误,指出java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double,当我尝试,也许它转换为一个长只是为了观察什么时候火力对象双会发生我得到这个错误java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long,所以总之错误反之亦然。这是我用得到我总在火力地堡dataSnapshot代码:得到双倍从火力地堡

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

,这是我使用,以节省火力总代码:

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

我期待检索使用Double火力总,但它给我的ClassCastException。请帮助解决方案。 我也尝试找here一个解决方案,但没有发现任何

这是我FirebaseDatabase在那里我从查询:enter image description here

+0

既然你得到两种类型的'ClassCastException's,我认为这个问题是从你试图获取数据节点有几个孩子是“长”的,还有其他孩子是“双”的。请发布您的数据库结构。 –

+0

@Rohan Stark。我现在只是把它贴出来... – Zack

我想我可以看到从你的数据库截图的问题。你有一个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(); 
+0

哇感谢人节省了一天,现在它工作得很好。 – Zack

+0

太棒了!一切顺利 –

+1

如何存储0.0而不是0?当我写'.setValue(0.0)'或'.setValue(新双(0.0))'它仍然存储为一个长值为0。 – Jesper