当我尝试将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();
答案 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);