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:
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)
}
3 Réponses :
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.
Une erreur se produit lorsque j'essaye de convertir un objet en classe CartModel.
Vous avez deux façons de résoudre votre problème:
convertissez votre objet dans le bon objet:
Map<Key, Value> cartList = new HashMap<String,CartModel>(); ^^^ ^^^^
Vous devez définir le type de clé et de valeur:
Object object = (MyObject) cartList.get(key); ^^^^^^^^
1> c'est une distribution redondante
2> Je ne contrôle pas le type cartList, il vient du serveur
Map
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à.
Quel type d'objet donne
cartList.get (key)
?Veuillez ajouter le contenu de votre classe
CartModel
et répondez avec @AlexMamoa 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 souscarItem 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 .