首页 文章

使用Firebase数据加载RecyclerView时出现问题(无设置者/字段)

提问于
浏览
0

我需要用我在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

    问题出在Aviso Class上 . Aviso Json对象包含另外两个Json对象

    • LT9trd7ej8aLhPlDVsM

    • login2

    所以要么你可以手动解析它,要么你必须修改你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();
            }
    

相关问题