J'ai une application Android qui se connecte à Google App Engine en utilisant les services de repos, l'application fonctionne parfaitement jusqu'à ce qu'elle soit masquée par ProGuard avant la libération.ProGuard - org.codehaus.jackson.map.JsonMappingException: Aucun constructeur approprié trouvé pour le type
L'erreur signalée dans LogCat lors de l'exécution de l'application est brouillée:
Unable to convert a [application/json,UTF-8] representation into an object of
class com.enterprisemk.android.bcw.bincollection.WasteCollectionAreasContainer
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found
for type [simple type, class
com.enterprisemk.android.bcw.bincollection.WasteCollectionAreasContainer]:
can not instantiate from JSON object (need to add/enable type information?)
je suit dans mon fichier proguard-project.txt:
-keepattributes *Annotation*,EnclosingMethod
-keep public class org.w3c.** {public private protected *;}
-dontwarn org.w3c.**
-keep public class org.joda.time.** {public private protected *;}
-dontwarn org.joda.time.**
-keep public class org.restlet.** { *; }
-dontwarn org.restlet.**
-keep public class org.codehaus.** { *; }
-dontwarn org.codehaus.**
-keepattributes Signature
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**
Et ma classe l'erreur fait référence à ressemble à:
public class WasteCollectionAreasContainer {
public List<WasteCollectionAreas> wasteCollectionAreasList;
public List<WasteCollectionAreas> getWasteCollectionAreasList() {
return wasteCollectionAreasList;
}
public void setWasteCollectionAreasist(List<WasteCollectionAreas> wasteCollectionAreasList) {
this.wasteCollectionAreasList = wasteCollectionAreasList;
}
public WasteCollectionAreasContainer() {
wasteCollectionAreasList = new ArrayList<WasteCollectionAreas>();
}
@JsonCreator
public WasteCollectionAreasContainer(List<WasteCollectionAreas> wasteCollectionAreasList) {
this.wasteCollectionAreasList = wasteCollectionAreasList;
}
}
Pour réitérer avant l'obfuscation via ProGuard l'application fonctionne parfaitement.
Quelqu'un peut-il m'aider à résoudre ce problème?
un certain temps progaurd supprime certaines classes du chemin de compilation, en particulier les projets de bibliothèque. – Ankit
Des sons tels que Proguard ont peut-être supprimé le constructeur non paramétré par défaut de 'WasteCollectionAreasContainer'. Cette classe a-t-elle aussi un constructeur surchargé? Proguard supprime le constructeur par défaut * car * il y a une surcharge * et * il pense que le constructeur par défaut n'est utilisé nulle part - cela peut arriver parce que Proguard ne peut pas détecter que Jackson utilise réellement/nécessite un constructeur par défaut pour les POJOs lors de l'exécution. –
MH - cela m'a mis dans la bonne direction pour corriger le problème - merci –