java - Firebase dataSnapshot.getValue(Subclass.class) 函数永远不会返回
问题描述
我正在尝试从 Firebase 为“卖家”和“客户”的“用户”的两个不同孩子获取价值。这些孩子也有卖家或客户的 ID。
Seller 和 Customer 是 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 检索子类项目?
解决方案
[解决了]
谁有类似的问题是从 Firebase 反序列化对象,不要忘记编写一个空的构造函数。我只有带参数的构造函数,然后我向子类添加了空参数构造函数,它起作用了。
推荐阅读
- python - ValueError: no enough values to unpack (expected 2, got 1) custom environment
- javascript - 对象过滤的嵌套数组在 JS 中返回 undefined
- pandas - 使用索引中的非唯一值进行切片/过滤
- php - AssertionError ERR_ASSERTION: mix.postCss() is missing required parameter 1: src
- angular - 编译 Angular 11(从 Angular 9 升级)应用程序时出错
- python - 使用 fastapi 和 jinja2 从 html 链接文件
- firebase - Cloud Function 未执行 Flutter
- terminal - Terminal nano 不会退出
- python - 如何从python列表中的datafarmes获取空行?
- awk - 仅当在变量中指定的函数的函数定义中找到模式时才替换模式