16 avril 2008
Imprimer ce billet

Flex et les ArrayCollection

Lors du développement d'une application, j'ai été confronté à un problème avec Flex 2. Lors de la récupération du résultat du HTTPService sous forme de données XML, celui-ci est casté en ArrayCollection, mais lorsque la réponse envoyée par le HTTPService ne contient qu'un seul élément et que vous voulez créer une liste de type ArrayCollection, l'erreur suivante apparaît :

"cannot convert mx.utils::ObjectProxy@36fbf81 to mx.collections.ArrayCollection"

Le problème réside dans le fait que le moteur Flash essaye de convertir du XML en objet, et lorsque celui-ci ne repère qu'un seul élément, il ne le convertit pas en ArrayCollection. En effet, il n'est pas possible de savoir si un noeud XML représente une liste composée d'un élément ou bien un simple objet.
Cependant, il existe une solution : il suffit de gérer le cas où il n'y a qu'un seul élément. Je vous l'accorde ce n'est pas très élégant, mais il faut passer par ce test :

resultList est de type ArrayCollection

//Ne contient aucun élément
if (httpService.lastResult.response.counts == null) {
   
    errortext.visible = true;

//Contient un seul élément
} else if (httpService.lastResult.response.counts is ObjectProxy) {

resultList = new ArrayCollection([httpService.lastResult.response.counts]);

//Contient n éléments
} else {

resultList = httpService.lastResult.response.counts as ArrayCollection;

}

Vous pouvez trouver plusieurs manières de résoudre ce problème sur d'autres sites. Néanmoins, celle-ci est peut-être la plus élégante (non vous ne rêvez pas). En espérant que cette solution permette de faire gagner du temps à d'autres personnes.

Enjoy !

Mots-clefs :,