从Android上的firebase获取具有列表的对象
我有一个面向用户的类从Android上的firebase获取具有列表的对象,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个面向用户的类 public class User { @SerializedName("username") private String userName; @SerializedName("email") private String email; @SerializedName("bags") private List<Bag> bags; . . . 正如我所说,这在没有“袋子”的情况下是有效的,当我把它放进去时,我得到的错误是这个 com.google.fire
public class User {
@SerializedName("username")
private String userName;
@SerializedName("email")
private String email;
@SerializedName("bags")
private List<Bag> bags;
.
.
.
正如我所说,这在没有“袋子”的情况下是有效的,当我把它放进去时,我得到的错误是这个
com.google.firebase.database.DatabaseException: Expected a List while deserializing, but got a class java.util.HashMap
当我尝试这样做时就会发生这种情况
User user = dataSnapshot.getValue(User.class);
我已经搜索了很多关于如何检索列表的内容,但我找到的只是检索单个列表对象,而不是一个包含“单个数据”和列表的“混合”对象。正如您错误所说的,反序列化时需要的是一个
HashMap
而不是列表。因为Firebase是一个NoSQL数据库,所以Firbease中的所有内容都是以键和值对的形式构造的。因此Firebase中的每个节点都是一个映射。要解决此问题,请将bags
从列表更改为HashMap
,您的问题将得到解决
您也可以尝试以下方法:
GenericTypeIndicator<List<YourClass>> t = new GenericTypeIndicator<List<Message>>() {};
List<YourClass> messages = snapshot.getValue(t);
GenericTypeIndicator t=新的GenericTypeIndicator(){};
列表消息=snapshot.getValue(t);
正如错误所说,反序列化时,需要的是HashMap
而不是列表。因为Firebase是一个NoSQL数据库,所以Firbease中的所有内容都是以键和值对的形式构造的。因此Firebase中的每个节点都是一个映射。要解决此问题,请将bags
从列表更改为HashMap
,您的问题将得到解决
您也可以尝试以下方法:
GenericTypeIndicator<List<YourClass>> t = new GenericTypeIndicator<List<Message>>() {};
List<YourClass> messages = snapshot.getValue(t);
GenericTypeIndicator t=新的GenericTypeIndicator(){};
列表消息=snapshot.getValue(t);
试试这个:
@SerializedName("bags")
private Map<String,Bag> bags;
@SerializedName(“行李”)
私人地图袋;
试试这个:
@SerializedName("bags")
private Map<String,Bag> bags;
@SerializedName(“行李”)
私人地图袋;
我尝试过,但现在的错误是:类java.util.HashMap有泛型类型参数,请改用GenericTypeIndicator
我尝试过,但现在的错误是:类java.util.HashMap有泛型类型参数,请改用GenericTypeIndicator
我认为手动反序列化是更好的方法。但您可以尝试对bags属性使用typeHashMap
,我认为手动反序列化是更好的方法。但您可以尝试对bags属性使用typeHashMap
。