Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Instanciation d'une class dans un .jar

Sujet résolu
    16 février 2013 à 21:56:52

    Bonjour/bonsoir,

    Je me permets de poster sur ce forum car je suis confronté à un problème épineux et ceux depuis plusieurs jours. 

    Avant de vous expliquer mon problème voici sur quel environnement je travail :

    Windows 7 (64 bits), Eclipse, Android SDK 2.3

    Je suis actuellement en train de développer une application qui requiert une inscription et je souhaite vérifier ce que l'utilisateur rentre comme données.

    Pour cela, j'ai eu l'idée de créer une librairie de validation de formulaire avec des regex. Voici le code :

    package form.main;
    
    import java.util.regex.Pattern;
    
    public class verifForm {
    	
    	boolean		res = true;
    	String		email_rules = "^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)+$";
    	String		login_rules = "[a-zA-Z0-9\\-\\_]+";
    	
    	//--> debut verification des emails
    	public boolean		verifEmail(String email)	{
    		if (email.length() == 0)
    			return false;
    		res = Pattern.matches(email_rules, email);
    		return res;
    	}
    	public boolean		verifEmail(String email, String rules)	{
    		if (email.length() == 0)
    			return false;
    		if (rules != null && rules.length() != 0)	{
    			res = Pattern.matches(rules, email);
    			return res;
    		}
    		res = Pattern.matches(email_rules, email);
    		return res;
    	}
    	public boolean		verifEmail(String email, String rules, int min, int max)	{
    		if (min == 0 && max == 0 || (min > max))
    			return false;
    		if (email.length() == 0 || (email.length() < min || email.length() > max))
    			return false;
    		if (rules != null && rules.length() != 0)	{
    			res = Pattern.matches(rules, email);
    			return res;
    		}
    		res = Pattern.matches(email_rules, email);
    		return res;
    	}
    	//--> fin verification des emails
    	
    	//--> debut verification des logins
    	public boolean		verifLogin(String login)	{
    		if (login == null || login.length() == 0)
    			return false;
    		//ici je verifie si une des lettes que contient ma regle est dans la chaine si c'est le cas ca me renvoit true et donc il y a une erreur
    		res = Pattern.matches(login_rules, login);
    		return res;
    	}
    	public boolean		verifLogin(String login, String rules)	{
    		if (login == null || login.length() == 0)
    			return false;
    		if (rules != null && rules.length() != 0)	{
    			res = Pattern.matches(rules, login);
    			return res;
    		}
    		res = Pattern.matches(login_rules, login);
    		return res;
    	}
    	public boolean		verifLogin(String login, String rules, int min, int max)	{
    		if (min == 0 && max == 0 || (min > max))
    			return false;
    		if (login == null || login.length() == 0 || (login.length() < min || login.length() > max))
    			return false;
    		if (rules != null && rules.length() != 0)	{
    			res = Pattern.matches(rules, login);
    			return res;
    		}
    		res = Pattern.matches(login_rules, login);
    		return res;
    	}
    	//--> fin verification login
    	
    	//--> debut verification des password
    	public boolean		verifPassword(String password)	{
    		if (password == null || password.length() == 0)
    			return false;
    		return true;
    	}
    	public boolean		verifPassword(String password, String rules)	{
    		if (password == null || password.length() == 0)
    			return false;
    		if (rules == null || rules.length() == 0)
    			return true;
    		res = Pattern.matches(rules, password);
    		return res;
    	}
    	public boolean		verifPassword(String password, String rules, int min, int max)	{
    		if (min == 0 && max == 0 || (min > max))
    			return false;
    		if (password == null || password.length() == 0 || (password.length() < min || password.length() > max))
    			return false;
    		if (rules == null || rules.length() == 0)
    			return true;
    		res = Pattern.matches(rules, password);
    		return res;
    	}
    	//--> fin verification des passwords
    	
    	//--> debut verification d'une string
    	public boolean		verifString(String str, String rules)	{
    		if (str == null || str.length() == 0)
    			return false;
    		if (rules == null || rules.length() == 0)
    			return true;
    		res = Pattern.matches(rules, str);
    		return res;
    	}
    	public boolean		verifString(String str, int min, int max)	{
    		if (min == 0 && max == 0 || (min > max))
    			return false;
    		if (str == null || str.length() == 0 || (str.length() < min || str.length() > max))
    			return false;
    		return true;
    	}
    	public boolean		verifString(String str, String rules, int min, int max)	{
    		if (min == 0 && max == 0 || (min > max))
    			return false;
    		if (str == null || str.length() == 0 || (str.length() < min || str.length() > max))
    			return false;
    		if (rules == null || rules.length() == 0)
    			return true;
    		res = Pattern.matches(rules, str);
    		return res;
    	}
    	public boolean		equalString(String str, String str2)	{
    		if (str == null || str2 == null)
    			return false;
    		if (str.equals(str2) == false)
    			return false;
    		return true;
    	}
    	//--> fin verification d'une string
    	
    }

    Comme vous pouvez le constater, rien de bien méchant. Je choisis donc d'exporter ce projet en .jar . Jusque là pas de problème.

    Ensuite pour tester ma bibliothèque, je crée un projet java avec ce code :

    package test.main;
    
    import	form.main.*;
    
    public class main {
    	
    	 public static void main(String args[]){
    		 verifForm form = new verifForm();
    		 
    		 System.out.println(form.verifEmail("toto@toto.com"));
    		 
    		 
    	 }
    	
    }

    Je compile cela me renvoit "true" donc tout va bien. Cependant lorsque j'intègre ma bibliothèque à mon projet Android dans le dossier "libs", que je vais dans les propriétés de mon projet pour inclure ma bibliothèque dans mon Java Build Path et j'essaie d'instancier ma classe, je me retrouve avec une erreur de ce type et mon application se stoppe :

    02-16 20:54:04.365: E/AndroidRuntime(6702): java.lang.NoClassDefFoundError: form.main.verifForm

    Voici le code de mon application Android :
    package android.views;
    
    import form.main.*;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class AccountCreationActivity extends FragmentActivity {
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		verifForm	form = new verifForm();
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.accountcreation);
    
    		TextView title = (TextView) findViewById(R.id.title);
    
    		if (title != null) {
    
    			title.setText("Create Account");
    			//System.out.println("test dossier bin");
    		}
    	}
    	
    	public void		register(View v)	{
    		verifForm	form = new verifForm();
    
    		System.out.println("test");
    		EditText email = (EditText)findViewById(R.id.emailValue);
    		EditText login = (EditText)findViewById(R.id.loginValue);
    		EditText pwd = (EditText)findViewById(R.id.pwdValue);
    		EditText pwdConf = (EditText)findViewById(R.id.pwdValueConf);
    		
    	/*	if (form.verifEmail(email.getText().toString(), null, 0, 100) == false)
    			Toast.makeText(getApplicationContext(), getResources().getString(R.string.wrong_email), Toast.LENGTH_LONG).show();
    		if (form.verifLogin(login.getText().toString(), null, 0, 25) == false)
    			Toast.makeText(getApplicationContext(), getResources().getString(R.string.wrong_login), Toast.LENGTH_LONG).show();
    		if (form.verifPassword(pwd.getText().toString(), null, 0, 25) == false)
    			Toast.makeText(getApplicationContext(), getResources().getString(R.string.wrong_pwd), Toast.LENGTH_LONG).show();
    		if (form.verifPassword(pwdConf.getText().toString(), null, 0, 25) == false)
    			Toast.makeText(getApplicationContext(), getResources().getString(R.string.wrong_pwd_conf), Toast.LENGTH_LONG).show();
    		if (form.equalString(pwd.getText().toString(), pwdConf.getText().toString()) == false)
    			Toast.makeText(getApplicationContext(), getResources().getString(R.string.wrong_conf_pwd), Toast.LENGTH_LONG).show();*/
    	}
    }
    Mon application plante sur la ligne "verifForm form = new verifForm();"
    Auriez une idée d'où cela pourrait venir ?
    Merci d'avance.



    • Partager sur Facebook
    • Partager sur Twitter
      26 février 2013 à 17:48:00

      Après 10j, je me permets un petit up. :)
      • Partager sur Facebook
      • Partager sur Twitter
        27 février 2013 à 13:19:23

        Regarde le paragraphe "Setting Up a Library Project" dans la documentation officielle (http://developer.android.com/tools/projects/projects-eclipse.html), cela devrait suffire pour t'aider.

        • Partager sur Facebook
        • Partager sur Twitter
          27 février 2013 à 14:42:30

          Bonsoir,

          Si tu travailles avec un jar, il ne devrait pas y avoir de différence d'utilisation entre un projet Java et un projet Android. Es-tu certain que ta bibliothèque a bien été integré dans ton projet ?

          Cela dit, sur Android, il existe un moyen plus conseillé pour inclure des librairies dans son projet. Cf. MrHide.

          • Partager sur Facebook
          • Partager sur Twitter
          Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
            2 mars 2013 à 14:18:57

            Merci pour vos reponses et le lien, j'ai pu reprendre a zero la creation de mon .jar et maintenant cela fonctionne. Je pense qu'une de mes erreurs venait du fait que je n'avais pas mis de majuscule au debut de ma classe dans ma librairie et que android ne l'acceptait donc pas en tant que class. Ce n'est qu'une supposition.

            Bref, merci :)

            • Partager sur Facebook
            • Partager sur Twitter

            [Android] Instanciation d'une class dans un .jar

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown