Сообщение об ошибке:
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
.