无法反序列化java.util.HashSet的实例

时间:2016-01-07 13:41:27

标签: android firebase firebase-realtime-database

这是我的第一篇文章,我是firebase的新手,对不起,如果我正在做一些愚蠢的问题。希望你能帮帮我。

这是我的豆子:

public class Fornecedor implements Comparable{
private int id;
private String nome;
private String email;
private int logo;
private Set<Produto> produtos;
private Set<Representante> representantes;

public int getId() {
    return id;
}

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

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public int getLogo() {
    return logo;
}

public void setLogo(int logo) {
    this.logo = logo;
}

public Set<Produto> getProdutos() {
    return produtos;
}

public void setProdutos(HashSet<Produto> produtos) {
    this.produtos = produtos;
}

public Set<Representante> getRepresentantes() {
    return representantes;
}

public void setRepresentantes(HashSet<Representante> representantes) {
    this.representantes = representantes;
}

}

这是我的firebase数据结构:

{
  "fornecedores" : {
    "avon" : {
      "email" : "contato@avon.com.br",
      "logo" : "avon.jpg",
      "nome" : "Avon Cosméticos",
      "produtos" : {
        "cremex" : true,
        "perfumex" : true
      },
      "representantes" : {
        "jao" : true,
        "ze" : true
      }
    },
    ... other nodes like above ...
  }
}

这就是我要做的事情:

Firebase ref = new Firebase("https://nasuakz.firebaseio.com/fornecedores");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            System.out.println("Tem " + snapshot.getChildrenCount() + " fornecedores");
            for (DataSnapshot fornecedorSnapshot : snapshot.getChildren()) {
                Fornecedor fornecedor = fornecedorSnapshot.getValue(Fornecedor.class);
                System.out.println(fornecedor.getNome() + " - " + fornecedor.getEmail());
            }
        }

}

这是上面代码的第7行发生的错误: 无法反序列化java.util.HashSet的实例

我知道将json映射到我的bean是有问题的,但是当我使用parcelable时这是有效的,所以我不明白为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

您的produtosrepresentantes不是设置,而是地图。他们将String键映射到Boolean值。

所以你需要为它们提供正确的映射:

public class Fornecedor implements Comparable{
  private int id;
  private String nome;
  private String email;
  private int logo;
  private Map<String, Boolean> produtos;
  private Map<String, Boolean> representantes;

  public int getId() { return id; }
  public void setId(int id) { this.id = id; }
  public String getNome() { return nome; }
  public void setNome(String nome) { this.nome = nome; }
  public String getEmail() { return email; }
  public void setEmail(String email) { this.email = email; }
  public int getLogo() { return logo; }
  public void setLogo(int logo) { this.logo = logo; }

  public Map<String, Boolean> getProdutos() { return produtos; }

  public Map<String, Boolean> getRepresentantes() { return representantes; }

}

您当然可以添加帮助方法来查找正确的ProdutoRepresentante对象。请务必将其标记为@JsonIgnore,以便杰克逊不会尝试将其序列化。

相关问题