进入OnDataChange FireBase Android时,应用程序崩溃

时间:2015-10-16 03:43:05

标签: java android hashmap firebase

当我尝试将DataSnapshot转换为Hashmap时,我收到了错误。

private void ponerCasoEnLista(){



        final ArrayList<DatosCaso> datos = new ArrayList<>();
        RUTA_DB.child("casos").addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot snapshot) {
                HashMap<String, String> casos = (HashMap<String, String>) snapshot.getValue();
                for (Object caso : casos.values()) {
                    HashMap<String, Object> casoMap = (HashMap<String, Object>) caso;
                    DatosCaso nuevosdatos = new DatosCaso((String) casoMap.get("nombre"), (String) casoMap.get("color"));
                    datos.add(nuevosdatos);
                    Log.d("NUEVOCASO", "Agrego caso al array");

                   /* if (!userInfoList.contains(userNumber)) {
                        String name = (String) userMap.remove("username");
                        String pic = (String) userMap.remove("profile_picture");
                        UserInfo info = new UserInfo(userNumber, name, pic);
                        userInfoList.add(info);
                    }*/
                }
                // thread executing here can get info from database and make subsequent call
                Collections.addAll(datos);
                ponerCasoEnListview(datos);
            }

我得到了这个:

10-16 00:30:22.951 15066-15066 /? E / AndroidRuntime:致命异常:主要     处理:com.example.gasti.escribocaso1510,PID:15066     java.lang.ClassCastException:java.lang.Long无法强制转换为java.util.HashMap             在com.example.gasti.escribocaso1510.ActividadPrincipal $ 2.onDataChange(ActividadPrincipal.java:109)

在OnDataChange之后的这一行:

HashMap<String, String> casos = (HashMap<String, String>) snapshot.getValue();

2 个答案:

答案 0 :(得分:1)

要转换为HashMap,只需使用

即可
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {   Map<String, Object> objectMap = (HashMap<String, Object>) dataSnapshot.getValue();
            Log.e("***", "onDataChange -> " + objectMap.toString());
        }

答案 1 :(得分:0)

如果没有看到您的数据结构,就无法确定,但我猜测casos是多个caso个对象的列表。

在那种情况下:

public void onDataChange(DataSnapshot snapshot) {
    for (Object caso : casos.values()) {
        HashMap<String, Object> casoMap = (HashMap<String, Object>) caso;
        DatosCaso nuevosdatos = new DatosCaso((String) casoMap.get("nombre"), (String) casoMap.get("color"));

您应该认真考虑为DatosCaso创建一个JavaBean对象:

public class DatosCaso {
  String nombre;
  String color;
  public DatosCaso() {}
  public String getNombre() { return nombre; }
  public String getColor() { return color; }
}

这允许您绕过HashMap:

DatosCaso nuevosdatos = caso.getValue(DatosCaso.class);