【发布时间】:2017-07-24 13:37:31
【问题描述】:
我有一个用户类
public class User {
@SerializedName("username")
private String userName;
@SerializedName("email")
private String email;
@SerializedName("bags")
private List<Bag> bags;
.
.
.
我的 firebase 数据库中有这些数据
在我添加“包”项之前,该对象已创建良好,我正在使用此方法通过 uid 检索用户:
public void retrieveUserByUid(String uid, FirebaseRetrieveUserListener listener){
Query userQuery = dbReference.child(FirebaseChild.users.name()).child(uid);
final FirebaseRetrieveUserListener dataListener = listener;
userQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
dataListener.retrieveUserByUid(user);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
正如我所说,这在没有“袋子”项目的情况下有效,当我把它放在时,我得到的错误就是这个。
com.google.firebase.database.DatabaseException: Expected a List while deserializing, but got a class java.util.HashMap
当我尝试这样做时会发生这种情况
User user = dataSnapshot.getValue(User.class);
我已经搜索了很多关于如何检索列表的信息,但我发现的只是检索单个列表对象,而不是具有“单个数据”和列表的“混合”对象。
【问题讨论】:
-
我认为在这种情况下手动反序列化是更好的方法。但是你可以尝试使用
HashMap<String, Bag>类型作为 bag 属性。
标签: android firebase firebase-realtime-database