得到双倍从火力地堡
问题描述:
我想从使用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一个解决方案,但没有发现任何
答
我想我可以看到从你的数据库截图的问题。你有一个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();
既然你得到两种类型的'ClassCastException's,我认为这个问题是从你试图获取数据节点有几个孩子是“长”的,还有其他孩子是“双”的。请发布您的数据库结构。 –
@Rohan Stark。我现在只是把它贴出来... – Zack