首页 > 解决方案 > 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) {

            }
        });

标签: javaandroidfirebasefirebase-realtime-database

解决方案


查看您的数据库,您有两种类型的数据Longdouble我首先要推荐的是,当您将数据推送到数据库时,您应该将所有值转换为双倍,即.0如果它们是 则将它们推送long

如果这不可能,您可以随时转换,假设您的值将在 double 范围内,您可以这样做:

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

注意:double使用 small d,您不能使用Double(with capital D) 以这种方式投射。


推荐阅读