Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android上的firebase获取具有列表的对象_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

从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属性使用type
HashMap
,我认为手动反序列化是更好的方法。但您可以尝试对bags属性使用type
HashMap