这是我的第一篇文章,我是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时这是有效的,所以我不明白为什么会发生这种情况。
答案 0 :(得分:2)
您的produtos
和representantes
不是设置,而是地图。他们将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; }
}
您当然可以添加帮助方法来查找正确的Produto
和Representante
对象。请务必将其标记为@JsonIgnore
,以便杰克逊不会尝试将其序列化。