我需要用存储在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"
}
}
非常感谢,我对此主题感到困惑
答案 0 :(得分:0)
问题出在Aviso类上。 Aviso Json对象包含另外两个Json对象
因此您可以手动解析它,或者您必须修改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();
}