Не удалось десериализовать объект.Не удается преобразовать объект типа java.util.ArrayList в тип - PullRequest
0 голосов
/ 22 ноября 2018

Сообщение об ошибке:

java.lang.RuntimeException: Не удалось десериализовать объект.Не удается преобразовать объект типа java.util.ArrayList в тип com.example.model.Cart (находится в поле 'cart')

Я уже упоминал много похожих вопросов, и все использовалиБаза данных Firebase Realtime, тогда как я использую Firebase Firestore.

Ниже приведены классы, которые я использую для базы данных.

User.java:

public class User implements Serializable {

    //  Data
    private String name, uid, mail, address;
    private Long phone;
    private ArrayList<Order> orders;
    private Cart cart;

    public User() {
        orders = new ArrayList<>();
        cart = new Cart();
    }
    /*  Getters and Setters for all variables */
}

Cart.java:

public class Cart {

    //  Data
    private ArrayList<SingleOrderItem> cart;

    public Cart() {
        cart = new ArrayList<>();
    }

    /*  Getters and Setters for all variables */
}

SingleOrderItem.java:

public class SingleOrderItem {

    //  Data
    private Product product;
    private int quantity;
    private Long cost;

    /*  Getters and Setters for all variables */
}

Product.java:

public abstract class Product {

    //  Data
    private String id, name, picUrl;
    private Long price; 

    /*  Getters and Setters for all variables */
}

Добавление данных в Firefase Firestore:

//  Initialize Firebase variables
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();

//  Fetch item details from activity
SingleOrderItem singleOrderItem = new SingleOrderItem();
singleOrderItem.setProduct(sweet);
singleOrderItem.setQuantity(1);
singleOrderItem.setCost(sweet.getPrice());

//  Get cart from user
Cart cart = user.getCart();
if (cart == null) {
    cart = new Cart();
}
ArrayList<SingleOrderItem> cartProducts = cart.getCart();
cartProducts.add(singleOrderItem);
cart.setCart(cartProducts);

//  Update cart to user
firebaseFirestore.collection("users").document(firebaseUser.getUid())
        .set(cart, SetOptions.merge());

Получение данных из Firefase Firestore:

//  Initialize firebase variables
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();

if (firebaseUser != null) {
    //  Fetch data from firestore
    firebaseFirestore.collection("users").document(firebaseUser.getUid())
                .addSnapshotListener((documentSnapshot, e) -> {

                    if (documentSnapshot != null) {

                        //  Save fetched data
                        User user = documentSnapshot.toObject(User.class);
                        userMutableLiveData.setValue(user);
                    }
                });
}

Я получаю сообщение об ошибке выше в этой конкретной строке:

Пользователь пользователя = documentSnapshot.toObject(User.class);

При получении данных из Firebase Firestore.

Что я пытаюсь сделать: Я создаю приложение электронной коммерции и когда пользователь нажимает на Добавить в корзину кнопку на любом товаре, я хотел бы добавить ее в корзину пользователя в firebase firestore.

Примечание: Получение данныхреализовано в ViewModel.

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