无法反序列化对象。无法将类型java.util.ArrayList的对象转换为type

时间:2018-11-22 11:31:18

标签: android firebase google-cloud-firestore

错误消息:

  

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 */
}

向Firebase 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());

从Firebase 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中实现了数据检索。

0 个答案:

没有答案