我正在尝试从Firebase中为“用户”的两个不同子级(“卖方”和“客户”)获取价值。这些孩子也有带有卖方或客户ID的孩子。
卖方和客户是User类的子类,我已经实现了所有的setter和getter。这是我的代码,无法从数据库中获取价值:
public class DatabaseWrapper {
private final static DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
private final static DatabaseReference usersRef = ref.child("users");
private final static DatabaseReference productsRef = ref.child("products");
private static Object retrieverObject = null;
public static User getUser(String type, String id) throws InterruptedException {
CountDownLatch done = new CountDownLatch(1);
usersRef.child(type).child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Never returns getValue(Subclass.class)
if (type.equals("customers"))
retrieverObject = dataSnapshot.getValue(Customer.class);
else
retrieverObject = dataSnapshot.getValue(Seller.class);
done.countDown();
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
done.await();
return (User)retrieverObject;
}
我故意使其同步代码以查看问题。
如果我使用getValue(User.class)
而不是getValue(Customer.class)
和getValue(Seller.class)
可以工作,但是这种用法显然无法获得子类中的字段。
所以问题是如何从Firebase检索子类项?
答案 0 :(得分:0)
[已解决]
谁遇到了类似的问题,即从Firebase反序列化对象,请不要忘记编写一个空的构造函数。我只有带有参数的构造函数,然后将空的参数构造函数添加到子类中,它起作用了。