1
votes

java.lang.ClassCastException: java.util.HashMap ne peut pas être converti en classe de données personnalisée

Je télécharge mon objet de classe de données sur Firestore, il se télécharge bien, lorsque j'essaye de le télécharger à partir d'une autre activité, l'exception java.lang.ClassCastException se produit. J'ai besoin que l'objet de la classe Cart dans AddToCart.java soit enregistré dans Firestore (Success) et le récupère dans Cart.java (Failure). S'IL VOUS PLAÎT AIDE !!!!!

Voici comment je mets des données dans Firestore:

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

Ici, la carte avec une valeur clé est téléchargée vers Firestore: Firestore image

MAINTENANT, voici le code pour récupérer cette carte.

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

                    }
                }
            });

Voici mon CartModel.java (Classe de données)

 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)

}

Debug image


11 commentaires

Quel type d'objet donne cartList.get (key) ?


Veuillez ajouter le contenu de votre classe CartModel et répondez avec @AlexMamo


a ajouté la classe de données


@AlexMamo aimablement voir ça.


@AlexMamo Veuillez voir ceci


Une dernière question. À l'intérieur de carItem 0 , vous souhaitez contenir un ou plusieurs éléments? C'est ce que vous vouliez en premier lieu, avoir ces champs sous carItem 0 ?


Je dois maintenir un panier pour un utilisateur spécifique, donc oui contre un identifiant de document, il y aura beaucoup d'objet CartModel donc oui lorsque vous essayez d'obtenir puis de firestore qu'il y aura beaucoup de cartItem, oui ce que je voulais, attendez @AlexMamo je vais montrer tu.


Ok, donne-moi un exemple.


@AlexMamo voir maintenant ... …… ..


J'ai joint la capture d'écran de l'écran de débogage ..... et mis à jour la capture d'écran du firestore.


continuons cette discussion dans le chat .


3 Réponses :


0
votes

Je pense que problème dans l'objet Constant. Il existe une incompatibilité entre Constant.listCartItems et l'objet que vous placez dans la carte.


1 commentaires

Une erreur se produit lorsque j'essaye de convertir un objet en classe CartModel.



0
votes

Vous avez deux façons de résoudre votre problème:

Solution 1

convertissez votre objet dans le bon objet:

Map<Key, Value> cartList = new HashMap<String,CartModel>(); 
    ^^^   ^^^^ 

Solution deux

Vous devez définir le type de clé et de valeur:

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


3 commentaires

1> c'est une distribution redondante


2> Je ne contrôle pas le type cartList, il vient du serveur


Map sont les paramètres à partir desquels les valeurs arrivent au serveur.



2
votes

Je vois maintenant dans la structure de votre base de données, que vous détenez plus d'un objet de type CartModel dans ce document. Pour résoudre ce problème, récupérez les données sous forme de Carte comme dans la ligne de code suivante:

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

Parcourez la carte et obtenez tout CartModel objets de celui-ci. Voilà.


0 commentaires