Validation des formulaires

Vérifier la cohérence des données dans Android

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com

L'article précédent a présenté ce qu'on peut faire avec les formulaires sous Android. Cependant quelle est leur utilité si l'on peut y passer n'importe quoi et donc soumettre à notre application des données qui sont inexploitables dans la plupart des cas ? C'est pourquoi, tout de suite, on abordera l'aspect de validation des formulaires sous Android. Dans la première partie on va se concentrer sur la vérification des champs. Plus loin on regardera comment afficher les messages d'erreur. A la fin on réunira ces deux aspects dans un cas issu de notre application.

Valider les formulaires sous Android

Il n'existe pas la validation des formulaires intégrées nativement sous Android. Plusieurs projets indépendants, comme Android Saripaar, ont vu le jour. Cependant, on ne va pas les implémenter pour l'instant. Dans notre application on utilisera la validation manuelle - plus robuste certes, mais ne compliquant pas la tâche d'apprentissage.

La validation se fera donc sur la base des outils fournis par Java. Pour vérifie un String, on pourra par exemple voir s'il n'est pas null et si sa longueur correspond à la longueur minimale spécifiée. Pour valider une Collection, on peut se baser sur la méthode size() qui vérifie le nombre d'éléments y présents. Pour une Map, on peut utiliser containsKey() et get() pour vérifier si une valeur est spécifiée.

Malgré cet environnement peu encourageant, Android fournit quelques méthodes qui peuvent rendre la validation plus rapide. La classe android.util.Patterns permet de vérifier si le texte correspond à une expressions régulière déjà définie. Grâce à elle on peut déterminer si une chaîne de caractères est :
- un nom de domaine (constante DOMAIN_NAME)
- une adresse e-mail (constante EMAIL_ADDRESS)
- une adresse IP (constante IP_ADDRESS)
- une extension du domaine valide (constante TOP_LEVEL_DOMAIN, liste disponible sur la page d'IANA)
- un URL valide (constante WEB_URL)

Afficher les erreurs sous Android

L'affichage des erreurs est déjà intégrée sur certains éléments des formulaires. Il suffit d'appeler la méthode setError() afin de rendre le message d'erreur visible. Cependant, cette fonction est introduite uniquement dans certaines classes : Button, EditText, CheckBox, AutoCompleteTextView ou encore RadioButton.

Pour les autres éléments, comme Spinner, on peut se baser sur un message sous forme d'un TextView qui sera affiché dans le cas d'une erreur de validation de la liste déroulante.

Validation des formulaires sous Android en pratique

Passons maintenant à un exemple précis de la validation. On utilisera pour cela notre page avec le formulaire de contact qui représente aussi bien l'affichage des erreurs intégrée dans Android que celui personnalisé.

Tout d'abord on va aborder la layout :

afficher le code

On observe la suite "libellé - champ du formulaire". Juste dans un seul endroit elle n'est pas implémentée. Il s'agit du fragment avec Spinner où le libellé est suivi par le block avec le message d'erreur. Il est déterminé par l'identifiant mailCategoryError.

En ce qui concerne la validation, elle s'effectue dans la méthode handleForm(). Au tout début on va récupérer les instances représentant les champs et juste ensuite les valeurs qu'elles contiennent. La validation des champs textuels se base sur les méthodes fournies en Java. Pour Spinner, on utilisera une fonction de validation, isValidSpinnerChoice(), car la validation de la liste déroulante s'effecute à deux endroits. Le champ avec l'adresse e-mail sera validée avec Patterns. Si aucune erreur n'est trouvée, hasErrors est faux et on peut donc envoyer l'e-mail. Dans le cas contraire l'utilisateur verra les messages d'erreur sur son écran. Voici le code de l'activité avec les fragments qui nous intéressent :

afficher le code

TODO : MVVN a présenter

TODO : rajouter des screens : erreurs de validation, avant de validation etc.

Bartosz KONIECZNY Validation

Une question ? Une remarque ?

*

*

Un conseil JavaScript

Un scroll avec dialog box de jQuery UI ?

Si vous voyez une barre horizontale qui apparaît après l'ouverture d'un dialog box sous IE8, il peut s'agit d'un problème de ce module pour le navigateur en question. Pour y remedier, on peut utiliser la méthode open() et forcer le navigateur à cacher cette bare. Prenons un exemple vivant :

var dialogBox = $(href).dialog({ autoOpen: false, closeOnEscape: true,
  open: function() {  
        $('body').css('overflow-x', 'hidden');
  },
  close: function() {
        $('body').css('overflow-x', 'auto');  
  }
});  
dialogBox.dialog("open");