java.lang.ClassCastException: java.util.HashMap не может быть приведен к пользовательскому классу данных. - PullRequest
0 голосов
/ 18 февраля 2019

Я загружаю свой объект класса данных в 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: Firestore image

СЕЙЧАС, вот код для возврата этой карты.

 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;
}

}

Debug image

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

У вас есть два способа решения вашей проблемы:

Решение одно

приведите ваш объект к правильному:

Object object = (MyObject) cartList.get(key);
                 ^^^^^^^^

Решение два

Вы должны установить тип ключа и значения:

Map<Key, Value> cartList = new HashMap<String,CartModel>(); 
    ^^^   ^^^^ 
0 голосов
/ 19 февраля 2019

Теперь я вижу в вашей структуре базы данных, что вы держите более одного объекта типа CartModel внутри этого документа.Чтобы решить эту проблему, получите данные в виде Map, как в следующей строке кода:

Map<String, Object> map = document.getData();

Выполните итерацию по map и получите из нее все CartModel объекты.Вот и все.

0 голосов
/ 18 февраля 2019

Я думаю, что проблема в постоянном объекте.Существует несоответствие между Constant.listCartItems и объектом, который вы помещаете на карту.

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