2010-09-30 4 views
1

Y at-il des bibliothèques de validateurs Java que je peux utiliser pour valider la saisie de texte à partir d'une application Android?Les validateurs Java?

Je sais que, au printemps, il y a validateurs pour divers types différents, tels que la vérification si une valeur est un int, si une valeur est un e-mail valide, etc etc

quelque chose de similaire en Java de base ou même Android?

bravo à l'avance. Je ne veux pas réinventer la roue si elle a déjà été implémentée. Je pourrais toujours poursuivre les expressions java reg pour construire mes propres mais je me demandais si c'était une faite spécifiquement pour les formats d'email.

+0

Quel type d'entrée essayez-vous de valider? Adresses mail? Rendez-vous? Les numéros de téléphone? Vous êtes sur la bonne voie sans réinventer la roue. Dans mon expérience, réinventer une validation pour un type d'entrée commun conduit souvent à le réinventer avec quelques bugs. : D – Freiheit

Répondre

2

J'ai écrit quelques classes de support pour résoudre ce problème. Il contient une interface de validation, une implémentation abstraite, une classe de validationresult et 2 exemples de validations implémentées personnalisées. 1 pour les expressions régulières sur le texte et une simple pour vérifier si une case est cochée.

Voici le lien vers mon blog contenant les sources et un petit peu d'expliquer la validation du formulaire sur Android: link text

1

Vous devez écrire vos propres méthodes de validation. Par exemple. vous pouvez utiliser le modèle regex pour les chaînes, java regex tutorial.

3

Normalement, je suggère Hibernate Validator, mais c'est probablement trop pour Android. Si vous effectuez une saisie de formulaire simple, vous pouvez écrire vos propres méthodes de validation et utiliser des expressions régulières pour valider votre entrée. Il y a quelques expressions régulières pour valider les adresses e-mails:

How to Find or Validate an Email Address

1

Oui, je suis l'auteur d'une bibliothèque pour traiter sur Android validations. Il valide EditText, CheckBox, RadioButton, Spinner par défaut. Vous pouvez également utiliser des annotations pour simplifier la validation.

Vous n'êtes pas limité par les annotations intégrées ou les règles. Vous pouvez toujours étendre la classe Rule dans la bibliothèque pour valider vos vues et règles personnalisées.

Il prend également en charge asynchrones (comme validations pour vérifier un nom d'utilisateur unique à partir d'un serveur distant.)

Vous pouvez consulter la page du projet de here.

J'ai également écrit un blog qui décrit comment écrire des règles personnalisées lorsque les règles intégrées ne sont pas suffisantes.

Espérons que cela aide.

Modifier (comme une clarification au commentaire de Jonney)

Oui, ce que vous avez présenté est logique. Pour enregistrer un nouveau compte et valider dans le même appel de service Web, vous pouvez effectuer des appels n pour enregistrer un nouveau compte, mais l'exemple que j'ai décrit dans le blog prendrait n + 1 pour enregistrer un nouveau compte. Cet exemple ne fait que mettre en valeur les capacités du Validator.

Pour accomplir ce que vous cherchez, vous pouvez simplement écrire une nouvelle règle.

Rule<EditText> registerIfUniqueRule = new Rule<EditText>("Username must be unique.") { 

    public boolean isValid(EditText view) { 
     String username = view.getText().toString(); 
     boolean accountRegistered = false; 

     // Make a call to your web service 
     // Mode code… 

     return accountRegistered; 
    } 
} 

Maintenant, ajoutez cette règle à votre instance Validator.

validator.put(usernameEditText, registerIfUniqueRule); 

Et à partir de l'un de vos EventListener s appellent la méthode de validation asynchrone.

validator.validateAsync(); 

Vous avez terminé;) Le validateur peut avoir des limites, mais pas dans le cas que vous avez mentionné, nous allons réfléchir à de nouvelles façons d'utiliser l'API une fois que nous l'habitude.

+0

J'ai lu votre blog et il ressemble à un validateur décent mais je pense que l'exemple de scénario que vous avez présenté n'est pas bon en termes de backend. au lieu de faire deux appels réseau pour vérifier le nom d'utilisateur et ajouter un nouvel utilisateur. la meilleure solution pratique consisterait à implémenter toutes les validations côté serveur sous un même appel, c'est-à-dire en ajoutant un nouvel utilisateur. Si je devais personnellement travailler avec une API qui s'occupe de la validation côté serveur séparément, je deviendrais fou lol. – jonney

Questions connexes