Я пытаюсь получить значение из Firebase для двух разных потомков «пользователей», которые являются «продавцами» и «клиентами». Также у этих детей есть дети, которые идентифицируют продавцов или покупателей.
Продавец и Клиент являются подклассами класса User, и я реализовал все установщики и получатели. Вот мой код, который не может получить значение из базы данных:
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?