Partage
  • Partager sur Facebook
  • Partager sur Twitter

{{Titre incorrect}} base de donnée android

erreur au lancement de l'application

5 février 2012 à 11:46:02

Bonjour, depuis peu j’essaie de développer des petites application pour mon mobile android, grâce à l'aide des tutoriels du SDZ :D
Je suis maintenant confronter à faire une base de donnée pour mon application, et je suis maladroit dans l'utilisation d'une bdd.
J'explique en bref mon appli : je veux faire comme un gestionnaire de mot de passe. D'après une catégorie (hotmail,gmail, jeux video, etc...) on peux enregistrer un identifiant, un mdp, et un petit mémo. Mais au cas où on me volerai mon téléphone, j'ai mis une authentification par compte d'utilisateur à mon application...je suis bloqué a ce niveau là.
Toute mon application se déroulais sans erreur avant que j’essaie d'implanter ma bdd...
Pouvez-vous m'aider ? :3
voici un peu de mon code :

Classe utilisateur
package xxx.xxxxxxxxxx.xx;

//implémentation de la classe Utilisateur défini par 3 attributs(pour l'instant)

public class Utilisateur {
	private int id;
	private String identifiant;
	private String mdp;
	
	public Utilisateur(){} //constructeur par défaut
	
	public Utilisateur(String mdp, String identifiant){
		this.identifiant = identifiant;
		this.mdp = mdp;
	}
	public String getIdentifiant(){
		return identifiant;
	}
	public void setIdentifiant(String identifiant){
		this.identifiant = identifiant;
	}
	public int getId(){
		return id;
	}
	public void setId(int id){
		this.id = id;
	}
	public String getMdp(){
		return mdp;
	}
	public void setMdp(String mdp){
		this.mdp = mdp;
	}
	//méthode pour le test dans mon activité principale
	public String toString(){
		return "ID : "+id+"\nMdp : "+mdp+"\nIdentifiant : "+identifiant;
	}
}


Classe MaBaseSQLite
package xxx.xxxxxxxxx.xxx;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
 
public class MaBaseSQLite extends SQLiteOpenHelper {
 
	private static final String TABLE_UTILISATEUR = "table_utilisateur";
	private static final String COL_ID = "ID";
	private static final String COL_IDENTIFIANT = "identifiant";
	private static final String COL_MDP = "mdp";
 
	private static final String CREATE_BDD = "CREATE TABLE " + TABLE_UTILISATEUR + " ("
	+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_IDENTIFIANT + " TEXT NOT NULL, "
	+ COL_MDP + " TEXT NOT NULL);";
	
	public MaBaseSQLite(Context context, String name, CursorFactory factory, int version) {
		super(context, name, factory, version);
	}
 
	@Override
	public void onCreate(SQLiteDatabase db) {
		//on crée la table à partir de la requête écrite dans la variable CREATE_BDD
		db.execSQL(CREATE_BDD);
	}
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//On peut faire ce qu'on veut ici moi j'ai décidé de supprimer la table et de la recréer
		//comme ça lorsque je change la version les id repartent de 0
		db.execSQL("DROP TABLE " + TABLE_UTILISATEUR + ";");
		onCreate(db);
	}
 
}


Classe utilisateurBDD
package xxx.xxxxxxxxx.xxx;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
 
public class UtilisateurBDD {
 
	private static final int VERSION_BDD = 1;
	private static final String NOM_BDD = "user.db";
 
	private static final String TABLE_UTILISATEUR = "table_utilisateur";
	private static final String COL_ID = "ID";
	private static final int NUM_COL_ID = 0;
	private static final String COL_IDENTIFIANT = "identifiant";
	private static final int NUM_COL_IDENTIFIANT = 1;
	private static final String COL_MDP = "mdp";
	private static final int NUM_COL_MDP = 2;
 
	private SQLiteDatabase bdd;
 
	private MaBaseSQLite maBaseSQLite;
	
	public UtilisateurBDD(Context context){
		//On crée la BDD et sa table
		maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);
	}
 
	public void open(){
		//on ouvre la BDD en écriture
		bdd = maBaseSQLite.getWritableDatabase();
	}
	public void close(){
		//on ferme l'accès à la BDD
		bdd.close();
	}
 
	public SQLiteDatabase getBDD(){
		return bdd;
	}
 
	public long insertUtilisateur(Utilisateur utilisateur){
		//Création d'un ContentValues (fonctionne comme une HashMap)
		ContentValues values = new ContentValues();
		//on lui ajoute une valeur associée à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
		values.put(COL_IDENTIFIANT, utilisateur.getIdentifiant());
		values.put(COL_MDP, utilisateur.getMdp());
		//on insère l'objet dans la BDD via le ContentValues
		return bdd.insert(TABLE_UTILISATEUR, null, values);
	}
	public int updateUtilisateur(int id, Utilisateur utilisateur){
		//La mise à jour d'un utilisateur dans la BDD fonctionne plus ou moins comme une insertion
		//il faut simplement préciser quel utilisateur on doit mettre à jour grâce à l'ID
		ContentValues values = new ContentValues();
		values.put(COL_IDENTIFIANT, utilisateur.getIdentifiant());
		values.put(COL_MDP, utilisateur.getMdp());
		return bdd.update(TABLE_UTILISATEUR, values, COL_ID + " = " +id, null);
	}
 
	public int removeUtilisateurWithID(int id){
		//Suppression d'un utilisateur de la BDD grâce à l'ID
		return bdd.delete(TABLE_UTILISATEUR, COL_ID + " = " +id, null);
	}
 
	public Utilisateur getUtilisateurWithIdentifiant(String identifiant){
		//Récupère dans un Cursor les valeurs correspondant à un utilisateur contenu dans la BDD (ici on sélectionne le utilisateur grâce à son identifiant)
		Cursor c = bdd.query(TABLE_UTILISATEUR, new String[] {COL_ID, COL_MDP, COL_IDENTIFIANT}, COL_IDENTIFIANT + " LIKE \"" + identifiant +"\"", null, null, null, null);
		return cursorToUtilisateur(c);
	}
	//Cette méthode permet de convertir un cursor en un Utilisateur
		private Utilisateur cursorToUtilisateur(Cursor c){
			//si aucun élément n'a été retourné dans la requête, on renvoie null
			if (c.getCount() == 0)
				return null;
	 
			//Sinon on se place sur le premier élément
			c.moveToFirst();
			//On créé un utiliateur
			Utilisateur utilisateur = new Utilisateur();
			//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
			utilisateur.setId(c.getInt(NUM_COL_ID));
			utilisateur.setMdp(c.getString(NUM_COL_MDP));
			utilisateur.setIdentifiant(c.getString(NUM_COL_IDENTIFIANT));
			//On ferme le cursor
			c.close();
	 
			//On retourne l'Utilisateur
			return utilisateur;
		}
}


Et mon activité principale :
package com.gestionnaire.mdp;

import com.gestionnaire.mdp.R;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Intent;
import android.widget.ImageButton;
import android.widget.*;

public class Gestionnaire extends Activity {
	//déclaration des variables
    ImageButton cadena_image = null;
    Button new_account = null;
    TextView mdp_oublie = null;
    EditText Identifiant = null;
    EditText mdp = null;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.log_display);
        //récupération des id dans mes variables
        cadena_image = (ImageButton)findViewById(R.id.cadena_image);
        new_account = (Button)findViewById(R.id.new_account);
        mdp_oublie = (TextView)findViewById(R.id.mdp_oublie);
        Identifiant = (EditText)findViewById(R.id.id_edit);
        mdp = (EditText)findViewById(R.id.mdp_edit);
        
        //application de Listener
        cadena_image.setOnClickListener(BoutonLog);
        new_account.setOnClickListener(BoutonNewAccount);
        mdp_oublie.setOnClickListener(TextMdpOublie);
        
        //création d'une instance de ma classe UtilisateurBDD
        UtilisateurBDD utilisateurBdd = new UtilisateurBDD(this);
        
        //création d'un utilisateur
        Utilisateur utilisateur = new Utilisateur("toto","tata");
        
        //on ouvre la base de données
        utilisateurBdd.open();
        
        //on insert l'utilisateur que l'on viens de créer
        utilisateurBdd.insertUtilisateur(utilisateur);
        
        //Pour vérifier que l'on a bien créé notre utilisateur dans la BDD
        //on extrait l'utilisateur de la BDD grâce à son identifiant
	    Utilisateur test = utilisateurBdd.getUtilisateurWithIdentifiant(utilisateur.getIdentifiant());
	    //Si un utilisateur est retourné (donc si l'utilisateur à bien été ajouté à la BDD)
	    if(test != null){
        	//On affiche les infos de l'utilisateur dans un Toast
        	Toast.makeText(this, test.toString(), Toast.LENGTH_LONG).show();
        	//On modifie l'identifiant de l'utilisateur
        	test.setIdentifiant("J'ai modifié l'identifiant");
        	//Puis on met à jour la BDD
            utilisateurBdd.updateUtilisateur(test.getId(), test);
        }
 
        //On extrait l'utilisateur de la BDD grâce au nouveau identifiant
        test = utilisateurBdd.getUtilisateurWithIdentifiant("J'ai modifié l'identifiant");
        //S'il existe un utilisateur possédant cet identifiant dans la BDD
        if(test != null){
	        //On affiche les nouvelles informations de l'utilisateur
        	//pour vérifier que l'identifiant de l'utilisateur a bien été mis à jour
	        Toast.makeText(this, test.toString(), Toast.LENGTH_LONG).show();
	        //on supprime l'utilisateur de la BDD grâce à son ID
	    	utilisateurBdd.removeUtilisateurWithID(test.getId());
        }
 
        //On essaye d'extraire de nouveau l'utilisateur de la BDD toujours grâce à son nouveau identifiant
        test = utilisateurBdd.getUtilisateurWithIdentifiant("J'ai modifié l'identifiant");
        //Si aucun utilisateur n'est retourné
        if(test == null){
        	//On affiche un message indiquant que l'utilisateur n'existe pas dans la BDD
        	Toast.makeText(this, "Cet utilisateur n'existe pas dans la BDD", Toast.LENGTH_LONG).show();
        }
        //Si l'utilisateur existe (mais normalement il ne devrait pas)
        else{
        	//on affiche un message indiquant que l'utilisateur existe dans la BDD
        	Toast.makeText(this, "Cet utilisateur n'existe pas dans la BDD", Toast.LENGTH_LONG).show();
        }
        //on ferme la BDD
        utilisateurBdd.close();
    }
    //on applique un listener sur le bouton de loggin
private OnClickListener BoutonLog = new OnClickListener(){
	 public void onClick(View V)
	 {
		 String id = Identifiant.getText().toString();
		 String mdP = mdp.getText().toString();
		 ///si Mot de passe ou identifiant est vide, on affiche un message, sinon on passe à l'activité suivante
		 if(id != null && id.length() > 0){
			 if(mdP != null && mdP.length() > 0){
	 Intent intent1 = new Intent(Gestionnaire.this,CategorieDisplay.class);
	 startActivity(intent1);
			 }else
				 Toast.makeText(Gestionnaire.this,"il faut que tu indique un mot de passe", Toast.LENGTH_LONG).show();
		 }else
			 Toast.makeText(Gestionnaire.this,"il faut que tu indique un identifiant", Toast.LENGTH_LONG).show();
	 }
	};	
	//listener pour passer à l'activité de création de compte.
private OnClickListener BoutonNewAccount = new OnClickListener(){
	public void onClick(View V)
	 {
	 Intent intent2 = new Intent(Gestionnaire.this,NewAccount.class);
	 startActivity(intent2);
	 }
	};
	//Listner pour passer à l'activité du mot de passe oublié
	private OnClickListener TextMdpOublie = new OnClickListener(){
		public void onClick(View V){
			Intent intent3 = new Intent(Gestionnaire.this,mdpOublie.class);
			startActivity(intent3);
		}
	};
}


Je n'ai pas mis les autre activités qui n'ont pas d'interêt car c'est l'insertion de ma BDD qui me donne des erreur.
  • Partager sur Facebook
  • Partager sur Twitter
6 février 2012 à 10:54:07

Merci de lire les règles concernant le titre à donner aux sujets.
  • Partager sur Facebook
  • Partager sur Twitter