java.lang.ClassCastException:从Firebase检索数据时,不能将java.lang.Double强制转换为java.lang.Long

时间:2018-09-13 08:30:12

标签: java android firebase firebase-realtime-database

我的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) {

            }
        });

2 个答案:

答案 0 :(得分:0)

也许您可以使用java.lang.Long的内置方法?

public double doubleValue()

如果要将其保留为对象,则实例化一个新的java.lang.Double吗?

Double myDouble = new Double (nilaiRef.doubleValue()) ;

doubleValue()中为您完成了转换。

答案 1 :(得分:0)

查看数据库,您有两种类型的数据Longdouble,我建议的第一件事是,在将数据推送到数据库时,应将所有值都转换为两倍,即推送它们.0long一起使用。

如果这不可能,您可以始终进行转换,假设您的值将在double范围内,则可以执行以下操作:

final double nilai_temp = (double) dataHasil.child(users.getUid()).getValue();

请注意:double的{​​{1}}较小,您无法使用d(大写的Double)进行这种投射。