IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

NullPointerException avec SQLite


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 90
    Points : 55
    Points
    55
    Par défaut NullPointerException avec SQLite
    Bonsoir,
    j'éprouve quelque difféculté à me conneter avec une base de donnée sqlite sous android je me suis inspiré de ce tutoriel http://a-renouard.developpez.com/tut...ndroid/sqlite/ j'ai fait trois classe les voici

    classe metier User

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    package com.example.crud;
     
    public class User {
     
    	private int id;
    	private String username;
    	private String password;
    	private String email;
     
    	public User() {
    		super();
    	}
    	public User(int id, String username, String password, String email) {
    		super();
    		this.id = id;
    		this.username = username;
    		this.password = password;
    		this.email = email;
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
     
    }
    classe pour créer la base et gérer la connexion avec la base de donnée sqlite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    package com.example.crud;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
     
    public class DatabaseHandler extends SQLiteOpenHelper{
     
    	public static final String USER_KEY="idu";
    	public static final String USERNAME="username";
    	public static final String PASSWORD="password";
    	public static final String EMAIL="email";
    	public static final String TABLE="user";
    	public static final String TABLE_CEATE=
    	"CREATE TABLE "+TABLE+" ("+
    	USER_KEY+" INTEGER PRIMARY KEY AUTOINCREMENT,"+
    	USERNAME+" TEXT,"+
    	PASSWORD+", TEXT"+
    	EMAIL+" TEXT);";
    	public static final String TABLE_DROP="DROP TABLE IF EXISTS "+TABLE+";";
     
    	public DatabaseHandler(Context context, String name, CursorFactory factory,
    			int version) {
    		super(context, name, factory, version);
     
    	}
     
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		db.execSQL(TABLE_CEATE);
     
    	}
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		db.execSQL(TABLE_DROP);
    		onCreate(db);
     
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    package com.example.crud;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
     
    public class UserDAO {
     
    	private static final int VERSION_BDD = 2;
    	private static final String NOM_BDD = "users.db";
     
    	public static final String USER_KEY="idu";
    	public static final String USERNAME="username";
    	public static final String PASSWORD="password";
    	public static final String EMAIL="email";
    	public static final String TABLE="user";
    	public static final String TABLE_CEATE=
    	"CREATE TABLE "+TABLE+" ("+
    	USER_KEY+" INTEGER PRIMARY KEY AUTOINCREMENT,"+
    	USERNAME+" TEXT,"+
    	PASSWORD+", TEXT"+
    	EMAIL+" TEXT);";
    	public static final String TABLE_DROP="DROP TABLE IF EXISTS "+TABLE+";";
    	static private SQLiteDatabase bdd=null;
    	DatabaseHandler dtb;
     
    	public UserDAO(Context cntx){
    		dtb=new DatabaseHandler(cntx, NOM_BDD, null, VERSION_BDD);
    	}
     
    	public void open(){
    		if(bdd!=null){
    			bdd=dtb.getWritableDatabase();
    		}
     
    	}
     
    	public long insertUser(User user){
     
    		ContentValues values = new ContentValues();
    		values.put(USERNAME, user.getUsername());
    		values.put(PASSWORD, user.getPassword());
    		values.put(EMAIL, user.getEmail());
    		return bdd.insert(TABLE, null, values);
    	}
     
    	public User getUser(String username){
     
    		Cursor c = bdd.rawQuery("select " + USERNAME + " from " + TABLE
    				+ " where username='?'", new String[]{username});
    		return cursorToLivre(c);
     
    	}
     
    	private User cursorToLivre(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 livre
    		User user = new User();
    		//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
    		user.setId(c.getInt(0));
    		user.setUsername(c.getString(1));
    		user.setEmail(c.getString(3));
    		//On ferme le cursor
    		c.close();
     
    		//On retourne le livre
    		return user;
    	}
     
     
     
    }

    finalement l'activité qui appelle le tous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    package com.example.crud;
     
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.widget.Toast;
     
    public class MainActivity extends Activity {
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    		UserDAO userd=new UserDAO(this);
    		User user=new User(1, "login", "passwo", "email@gmail.com");
     
    		userd.open();
    		userd.insertUser(user);
     
    		User userresultat=userd.getUser(user.getUsername());
    		 if(userresultat != null){
    	        	//On affiche les infos du livre dans un Toast
    	        	Toast.makeText(this, userresultat.toString(), Toast.LENGTH_LONG).show();
    		 }
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.main, menu);
    		return true;
    	}
     
    }

    et voilà ce que m'affiche le logcat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    12-23 16:41:12.436: E/Trace(1917): error opening trace file: No such file or directory (2)
    12-23 16:41:12.446: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
    12-23 16:41:12.446: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
    12-23 16:41:12.446: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
    12-23 16:41:12.606: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
    12-23 16:41:12.606: W/Trace(1917): Unexpected value from nativeGetEnabledTags: 0
    12-23 16:41:13.106: D/AndroidRuntime(1917): Shutting down VM
    12-23 16:41:13.106: W/dalvikvm(1917): threadid=1: thread exiting with uncaught exception (group=0xb5cb3908)
    12-23 16:41:13.136: E/AndroidRuntime(1917): FATAL EXCEPTION: main
    12-23 16:41:13.136: E/AndroidRuntime(1917): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.crud/com.example.crud.MainActivity}: java.lang.NullPointerException
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.ActivityThread.access$600(ActivityThread.java:141)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.os.Looper.loop(Looper.java:137)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.ActivityThread.main(ActivityThread.java:5039)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at java.lang.reflect.Method.invokeNative(Native Method)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at java.lang.reflect.Method.invoke(Method.java:511)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at dalvik.system.NativeStart.main(Native Method)
    12-23 16:41:13.136: E/AndroidRuntime(1917): Caused by: java.lang.NullPointerException
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at com.example.crud.UserDAO.insertUser(UserDAO.java:45)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at com.example.crud.MainActivity.onCreate(MainActivity.java:19)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.Activity.performCreate(Activity.java:5104)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
    12-23 16:41:13.136: E/AndroidRuntime(1917): 	... 11 more
    je suis débutant sur android et je n'arrive pas à reconnaitre la source de l'erreur.Merci infiniment de votre aide

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    A priori, je pense que l'erreur vient de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void open(){
    		if(bdd!=null){
    			bdd=dtb.getWritableDatabase();
    		}
    }
    Je ferais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void open(){
    		if(bdd==null){
    			bdd=dtb.getWritableDatabase();
    		}
    }
    Sans ça bdd sera toujours null, d'ou la NullPointerException, que tu obtiens, sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return bdd.insert(TABLE, null, values);
    dans UserDao (dans ta stacktrace, java.lang.NullPointerException at com.example.crud.UserDAO.insertUser(UserDAO.java:45)).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 90
    Points : 55
    Points
    55
    Par défaut
    Merci infiniment c'était ça l'erreur

Discussions similaires

  1. nullPointerException avec JBoss et Log4j
    Par ]matmat[ dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 03/05/2007, 17h33
  2. Débuter avec SQLite et les bases de données en général
    Par Toine dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/04/2007, 06h59
  3. Etats avec SqLite
    Par Didier L dans le forum Bases de données
    Réponses: 7
    Dernier message: 03/11/2006, 10h33
  4. connexion avec sqlite
    Par islem dans le forum SQLite
    Réponses: 1
    Dernier message: 17/07/2006, 12h54
  5. NullPointerException avec Graphics?
    Par charaf dans le forum Graphisme
    Réponses: 7
    Dernier message: 20/06/2006, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo