Firebase dataSnapshot.getValue (Subclass.class) никогда не возвращает - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь получить значение из 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?

1 Ответ

0 голосов
/ 23 марта 2019

[РЕШИТЬ]

У кого похожая проблема с десериализацией объектов из Firebase, не забудьте написать пустой конструктор. У меня были только конструкторы с параметрами, затем я добавил пустой конструктор параметров в подклассы, он работал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...