我的Firebase实时数据库中有十进制数字,但是当我检索到长值时。出现错误
java.lang.ClassCastException:无法将java.lang.Double强制转换为 java.lang.Long
然后,我尝试将代码更改为两倍。但是它会出错:
java.lang.ClassCastException:无法将java.lang.Long强制转换为 java.lang.Double
但是当我将Firebase的值更改为interger ex:70时,它的效果很好,并显示了很长的70.0值。
这是我的数据库 enter image description here
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) {
}
});
答案 0 :(得分:0)
也许您可以使用java.lang.Long的内置方法?
public double doubleValue()
如果要将其保留为对象,则实例化一个新的java.lang.Double吗?
Double myDouble = new Double (nilaiRef.doubleValue()) ;
在doubleValue()中为您完成了转换。
答案 1 :(得分:0)
查看数据库,您有两种类型的数据Long
和double
,我建议的第一件事是,在将数据推送到数据库时,应将所有值都转换为两倍,即推送它们.0
与long
一起使用。
如果这不可能,您可以始终进行转换,假设您的值将在double范围内,则可以执行以下操作:
final double nilai_temp = (double) dataHasil.child(users.getUid()).getValue();
请注意:double
的{{1}}较小,您无法使用d
(大写的Double
)进行这种投射。