java.lang.ClassCastException: java.lang.Double нельзя привести к java.lang.Long, когда извлекаются данные из Firebase - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть десятичное число в моей базе данных реального времени 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 с 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) {

            }
        });

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Глядя на вашу базу данных, у вас есть два типа данных Long и double, первое, что я порекомендую, пока вы отправляете данные в базу данных, вы должны преобразовать все значения в двойные, т.е. сдвинуть их с помощью .0 если они long.

Если это невозможно, вы всегда можете разыграть, предполагая, что ваши значения будут в диапазоне double, вы можете сделать это:

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

Примечание: double с небольшим d, вы не можете разыграть этот путь, используя Double (с большой буквы D).

0 голосов
/ 13 сентября 2018

Может быть, вы можете использовать встроенные методы java.lang.Long?

public double doubleValue()

Затем создайте экземпляр нового java.lang. Двойной, если вы хотите сохранить его как объект?

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

Для вас выполнено преобразование в doubleValue () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...