簡體   English   中英

java.lang.ClassCastException:從Firebase檢索數據時,不能將java.lang.Double強制轉換為java.lang.Long

[英]java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long , when retrieve data from Firebase

我的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的值。

這是我的數據庫, 在這里輸入圖像描述

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

            }
        });

也許您可以使用java.lang.Long的內置方法?

public double doubleValue()

如果要將其保留為對象,則實例化一個新的java.lang.Double嗎?

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

doubleValue()中為您完成了轉換。

查看您的數據庫,您有兩種類型的數據Longdouble ,我推薦的第一件事是,當您將數據推送到數據庫時,您應該將所有值都轉換為double,即如果它們為long則以.0推送它們。

如果無法做到這一點,則可以始終強制轉換,假設您的值將在double范圍內,則可以執行以下操作:

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

注意:使用小d double ,您不能使用Double (大寫D )來Double

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM