使用Firebase数据加载RecyclerView的问题(无设置器/字段)

时间:2018-12-09 22:12:38

标签: android firebase firebase-realtime-database recyclerview-layout

我需要用存储在FireBase中的数据填充一个recyclerview,但是我没有得到它,而且我找不到错误。

适配器

@Override
public void onBindViewHolder(UsuarioHolder holder, int position) {
    Aviso user = avisos.get(position);
    holder.latitud.setText(String.valueOf(user.getLatitud()));
    holder.longitud.setText(String.valueOf(user.getLongitud()));
    //holder.getNombre().setText(listMensaje.get(position).getNombre());
    holder.usuario.setText(user.getUsuario());
}
@Override
public int getItemCount() {
    return avisos.size();
}
public static class UsuarioHolder extends RecyclerView.ViewHolder{
    TextView usuario,longitud,latitud;
    public UsuarioHolder(View itemView) {
        super(itemView);
        usuario=itemView.findViewById(R.id.tvUsuario);
        longitud=itemView.findViewById(R.id.tvLongitud);
        latitud=itemView.findViewById(R.id.tvLatitud);
    }
}
}

对象

public class Aviso {
    private Double latitud;
    private Double longitud;
    private String usuario;

    public Aviso() {
    }

    public Aviso(Double latitud, Double longitud, String usuario) {
        this.latitud = latitud;
        this.longitud = longitud;
        this.usuario = usuario;
    }
    public Double getLatitud() {
        return latitud;
    }
    public void setLatitud(Double latitud) {
        this.latitud = latitud;
    }
    public Double getLongitud() {
        return longitud;
    }
    public void setLongitud(Double longitud) {
        this.longitud = longitud;
    }
    public String getUsuario() {
        return usuario;
    }
    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }
}

活动

@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            aviso.removeAll(aviso);
            for (DataSnapshot snapshot:
                    dataSnapshot.getChildren()){
                Aviso user = snapshot.getValue(Aviso.class);
                aviso.add(user);
            }
            adapter.notifyDataSetChanged();
        }

JSON

{
  "aviso" : {
    "-LT9trd7ej8aLhPlDVsM" : {
      "latitud" : 37.7,
      "longitud" : -122.0999983,
      "usuario" : "login2"
    },
    "login2" : {
      "latitud" : 32,
      "longitud" : -122.0999983,
      "usuario" : "login2"
    }
  },
  "chat" : {
    "-LT9WsU8whS5ZPONAosl" : {
      "fotoPerfil" : "",
      "hora" : 1544217397371,
      "mensaje" : "hola que tal",
      "nombre" : "Hola ",
      "typemensaje" : "1"

  }
}

非常感谢,我对此主题感到困惑

1 个答案:

答案 0 :(得分:0)

问题出在Aviso类上。 Aviso Json对象包含另外两个Json对象

  • LT9trd7ej8aLhPlDVsM
  • 登录2

因此您可以手动解析它,或者您必须修改Aviso Class,可以尝试这样做。

  for (DataSnapshot snapshot:dataSnapshot.getChildren()) {
            String jsonString = snapshot.getValue(String.class);
            JSONObject jsonObject = new JSONObject(jsonString);
            JSONObject avisoJsonObject = jsonObject.getJSONObject("aviso");
            Iterator<String> keys = avisoJsonObject.keys();
            while (keys.hasNext()) {
                String key = keys.next();
                if (avisoJsonObject.get(key) instanceof JSONObject) {
                    if (avisoJsonObject.getJSONObject(key).get("latitud") != null) {
                        JSONObject data = avisoJsonObject.getJSONObject(key);
                        Aviso user = new Aviso(data.getDouble("latitud"), data.getDouble("longitud"), data.getString("usuario"));
                        aviso.add(user);
                    }
                }
            }
            adapter.notifyDataSetChanged();
        }