java - java.lang.ClassCastException:从 Firebase 检索数据时,java.lang.Double 无法转换为 java.lang.Long
问题描述
我的 Firebase 实时数据库中有十进制数,但是当我检索到长值时。它会出错
java.lang.ClassCastException:java.lang.Double 不能转换为 java.lang.Long
然后,我尝试将代码更改为双精度。但它的错误如下:
java.lang.ClassCastException:java.lang.Long 不能转换为 java.lang.Double
但是,当我将 Firebase 的值更改为整数 ex: 70 时,它的表现很好并且显示值 70.0 和 long。
这是我的数据库 在此处输入图像描述
Java 类
nilaiRef.child(keys).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
listNilai.clear();
if(dataSnapshot.exists()){
for(DataSnapshot dataHasil : dataSnapshot.getChildren()){
final long nilai_temp = (long) dataHasil.child(users.getUid()).getValue();
======ERROR HERE=====
nilaiInfoRef.child(keys).child(dataHasil.getKey()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
NilaiMatakuliah nilai = dataSnapshot.getValue(NilaiMatakuliah.class);
nilai.setNilai(nilai_temp);
listNilai.add(nilai);
mAdapter.notifyDataSetChanged();
Log.e("nilais","1 "+nilai.getNilai());
Log.e("nilais","2 "+nilai.getNama());
Log.e("nilais","3 "+nilai.getSkala());
Log.e("nilais","4 "+nilai.getBobot());
}else{
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}else{
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
解决方案
查看您的数据库,您有两种类型的数据Long
,double
我首先要推荐的是,当您将数据推送到数据库时,您应该将所有值转换为双倍,即.0
如果它们是 则将它们推送long
。
如果这不可能,您可以随时转换,假设您的值将在 double 范围内,您可以这样做:
final double nilai_temp = (double) dataHasil.child(users.getUid()).getValue();
注意:double
使用 small d
,您不能使用Double
(with capital D
) 以这种方式投射。