我正在尝试通过完成子节点来返回列表

时间:2019-04-13 16:41:18

标签: java android firebase firebase-realtime-database

我试图通过完成子节点来返回列表。 我有一个包含有子节点的节点,我倾向于完全返回,但没有结果。

我收到以下错误:

  

System.err:com.google.firebase.database.DatabaseException:反序列化时需要一个List,但是得到了一个类java.util.HashMap

数据库:

image of database

private void preencherLista() {
    pontos= new ArrayList<>();

    databasePontos = ConfiguracoesFirebase.getPontos();
    databasePontos.keepSynced(true);
    databasePontos.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange( DataSnapshot dataSnapshot) {
            try{
                pontos.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Ponto ponto = snapshot.getValue(Ponto.class);
                    pontos.add(ponto);
                }


                adapter.atualizar(pontos);

            }catch (Exception e){
                e.printStackTrace();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

这是我的模特

public class Ponto implements Serializable {

public String id;
public String local;
public String descricao;
public String inicio;
public String termino;
public String url;
public String latitude;
public String longitude;
public List<Dia> dias = new ArrayList<>();
public Ponto() {
}

public Ponto(String id, String local, String descricao, String inicio, String termino, String url, String latitude, String longitude, List<Dia> dias) {
    this.id = id;
    this.local = local;
    this.descricao = descricao;
    this.inicio = inicio;
    this.termino = termino;
    this.url = url;
    this.latitude = latitude;
    this.longitude = longitude;
    this.dias = dias;
}

public List<Dia> getDias() {
    return dias;
}

public void setDias(List<Dia> dias) {
    this.dias = dias;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}


public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getLocal() {
    return local;
}

public void setLocal(String local) {
    this.local = local;
}

public String getInicio() {
    return inicio;
}

public void setInicio(String inicio) {
    this.inicio = inicio;
}

public String getTermino() {
    return termino;
}

public void setTermino(String termino) {
    this.termino = termino;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getLatitude() {
    return latitude;
}

public void setLatitude(String latitude) {
    this.latitude = latitude;
}

public String getLongitude() {
    return longitude;
}

public void setLongitude(String longitude) {
    this.longitude = longitude;
}


public List<Dia> retornaDias(){
    return null;
   }
}

2 个答案:

答案 0 :(得分:0)

您的模型还可以。 主代码中有一个小问题。

private void preencherLista() {


databasePontos = ConfiguracoesFirebase.getPontos();
databasePontos.keepSynced(true);
databasePontos.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange( DataSnapshot dataSnapshot) {
        ArrayList<Ponto> pontos = new ArrayList<Ponto>();
        try{
            pontos.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Ponto ponto = snapshot.getValue(Ponto.class);
                pontos.add(ponto);
            }


            adapter.atualizar(pontos);

        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

希望这会有所帮助。

答案 1 :(得分:0)

经过几个小时的搜索,我发现Firebase的结构与我想象的有些不同,我在Point模型中对其进行了更改:列出日期;地图天;我现在可以成功。我有点躺。谢谢!

https://imgur.com/KBDcwhB