Я загружаю свой объект класса данных в Firestore, он загружается нормально, когда я пытаюсь загрузить его из другого действия, происходит java.lang.ClassCastException.
Мне нужно, чтобы объект класса Cart в AddToCart.java был сохранен в Firestore (успех) и возвращен в Cart.java (сбой). ПОЖАЛУЙСТА ПОМОГИ!!!!!
Вот как я помещаю данные в Firestore:
private void updateFirestore() {
Map cartList = new HashMap<String,CartModel>();
//I put data into the map
FirebaseFirestore firestoreRef = FirebaseFirestore.getInstance();
firestoreRef.collection(colloctionKeyTitle)
.document(currentSelectedModel.getUserId()).set(cartList)
Здесь карта с одним значением ключа загружается в firestore:

ТЕПЕРЬ, вот код, чтобы вернуть эту карту.
FirebaseFirestore firestoreRef = FirebaseFirestore.getInstance();
Task<DocumentSnapshot> documentSnapshot = firestoreRef.collection(COLLECTION_ID).document(userId).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
cartList = task.getResult().getData();
if (cartList != null) {
if (!cartList.isEmpty()) {
for (String key : cartList.keySet()) {
Object object = cartList.get(key);// In object variable I see my data when debug, but app crashes on next line.
Constant.listCartItems.add((CartModel) object); //this is the line where error occur.
}
}
}
}
});
Вот мой CartModel.java (класс данных)
public class CartModel {
private String productTitle,productPrice, featuredImagePath, quantity;
public CartModel(String productTitle, String productPrice, String featuredImagePath,String quantity) {
this.productTitle = productTitle;
this.productPrice = productPrice;
this.quantity=quantity;
this.featuredImagePath = featuredImagePath;
}
public CartModel(String productTitle, String productPrice, String featuredImagePath) {
this.productTitle = productTitle;
this.productPrice = productPrice;
this.featuredImagePath = featuredImagePath;
}
public CartModel() {
}
public String getQuantity() {
return quantity;
}
public void setQuantity(String quantity) {
this.quantity = quantity;
}
public String getProductTitle() {
return productTitle;
}
public void setProductTitle(String productTitle) {
this.productTitle = productTitle;
}
public String getProductPrice() {
return productPrice;
}
public void setProductPrice(String productPrice) {
this.productPrice = productPrice;
}
public String getFeaturedImagePath() {
return featuredImagePath;
}
public void setFeaturedImagePath(String featuredImagePath) {
this.featuredImagePath = featuredImagePath;
}
}

Пожалуйста, добавьте содержание вашего класса CartModel и, пожалуйста, ответьте @AlexMamo
добавлен класс данных
@AlexMamo, пожалуйста, посмотрите это.
@AlexMamo Пожалуйста, посмотрите это
Еще один вопрос. Внутри carItem 0 вы хотите хранить один или несколько предметов? Это то, чего вы хотели в первую очередь, чтобы эти поля были под carItem 0?
Я должен поддерживать корзину для конкретного пользователя, поэтому да, против одного идентификатора документа будет много объектов CartModel, поэтому да, когда вы попытаетесь получить их из firestore, будет много cartItem, да, это то, что я хотел, подождите, @AlexMamo я покажу ты.
Хорошо, дайте мне пример.
@AlexMamo смотри сейчас...……..
Я прикрепил скриншот экрана отладки..... и обновил скриншот firestore.
Давайте продолжить обсуждение в чате.




Я думаю, что проблема в объекте Constant. Существует несоответствие между Constant.listCartItems и объектом, который вы поместили на карту.
Ошибка возникает, когда я пытаюсь привести объект к классу CartModel.
У вас есть два пути решения вашей проблемы:
приведите свой объект к правильному:
Object object = (MyObject) cartList.get(key);
^^^^^^^^
Вы должны установить тип ключа и значения:
Map<Key, Value> cartList = new HashMap<String,CartModel>();
^^^ ^^^^
1> Это избыточное приведение
2> Я не контролирую тип cartList, он поступает с сервера
Map<String,Object> — это параметры, значения которых поступают на сервер.
Теперь я вижу в вашей структуре базы данных, что вы содержите более одного объекта типа CartModel внутри этого документа. Чтобы решить эту проблему, получите данные в виде Map, как в следующей строке кода:
Map<String, Object> map = document.getData();
Перебрать map и получить из него все CartModel объекты. Вот и все.
Какой тип объекта дает
cartList.get(key)?