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

  1. #1
    Membre régulier Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Points : 70
    Points
    70
    Par défaut [SQLLite]Une NullPointerException apparaît lorsque il y a une écriture ou une lecture dans la base de données
    Bonjour,

    Je viens vers vous car cela fait plusieurs heures que je suis bloqué sur un problème. Mon application crash dès qu'il y a une écrire ou lecture dans la base de donnée

    Erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    03-20 21:29:35.022 2723-2723/mypet.caranille.com.mypet E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: mypet.caranille.com.mypet, PID: 2723
                                                                             java.lang.NullPointerException: Attempt to invoke virtual method 'void android.database.sqlite.SQLiteDatabase.execSQL(java.lang.String)' on a null object reference
                                                                                 at mypet.caranille.com.mypet.Class.PetManage.addPet(PetManage.java:36)
                                                                                 at mypet.caranille.com.mypet.MainActivity$1.onClick(MainActivity.java:37)
                                                                                 at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                 at android.os.Looper.loop(Looper.java:135)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:5753)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
    Voici mes 3 classes:
    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
    package mypet.caranille.com.mypet.Class;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
     
    public class DDB extends SQLiteOpenHelper
    {
        private static final String name = "caranille.ddb";
        private static final int version = 1;
     
        public DDB(Context context)
        {
            super(context, name, null, version);
        }
     
        public void onCreate(SQLiteDatabase db)
        {
            db.execSQL("CREATE table Pet " +
                    "(" +
                    "Pet_ID integer primary key autoincrement," +
                    "Pet_Name text not null," +
                    "Pet_Hunger int not null," +
                    "Pet_Thirst int not null" +
                    ")");
        }
     
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
     
        }
    }
    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
    package mypet.caranille.com.mypet.Class;
     
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
     
    import java.sql.SQLException;
     
    import mypet.caranille.com.mypet.Class.DDB;
     
    /**
     * Created by Jeremy on 12/03/2016.
     */
    public class PetManage
    {
        private DDB ddb;
        private SQLiteDatabase database;
     
        public PetManage(Context context)
        {
            ddb = new DDB(context);
        }
     
        public void open() throws SQLException
        {
            database = ddb.getWritableDatabase();
        }
     
        public void close()
        {
            ddb.close();
        }
     
        public void addPet(String name)
        {
            database.execSQL("INSERT INTO Pet VALUES (null, '" + name + "', '100', '100')");
            database.close();
        }
     
        public int verifyPet()
        {
            int verify = 0;
            Cursor cursor = database.rawQuery("SELECT * FROM Pet", new String[]{new String()});
            if (cursor.getCount() == 1)
            {
                verify = 1;
            }
            database.close();
            return verify;
        }
    }
    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
    package mypet.caranille.com.mypet.Class;
     
    public class Pet
    {
        private int ID;
        private String Name;
        private int Hunger;
        private int Thirst;
     
        public void Pet(int id, String name, int hunger, int thirst)
        {
            ID = id;
            Name = name;
            Hunger = hunger;
            Thirst = thirst;
        }
     
        //GETTER
        public int getID()
        {
            return ID;
        }
     
        public String getName()
        {
            return Name;
        }
     
        public int getHunger()
        {
            return Hunger;
        }
     
        public int getThirst()
        {
            return  Thirst;
        }
     
        //SETTER
        public void setID (int id)
        {
            ID = id;
        }
     
        public void setName (String name)
        {
            Name = name;
        }
     
        public void setHunger (int hunger)
        {
            Hunger = hunger;
        }
     
        public void setThirst (int thirst)
        {
            Thirst = thirst;
        }
    }
    Et voici l'activité principal:
    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
    package mypet.caranille.com.mypet;
     
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.EditText;
     
    import mypet.caranille.com.mypet.Class.PetManage;
     
    public class MainActivity extends AppCompatActivity
    {
        PetManage pm = new PetManage(this);
     
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
            int verify = pm.verifyPet();
     
            if (verify == 0) {
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.setTitle("MyPet"); //Set Alert dialog title here
                alert.setMessage("Veuillez saisir le nom de votre nouveau compagnon !"); //Message here
     
                // Set an EditText view to get user input
                final EditText input = new EditText(this);
                alert.setView(input);
     
                alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        String name = input.getText().toString();
                        pm.addPet(name);
                    }
                });
                AlertDialog alertDialog = alert.create();
                alertDialog.show();
            }
            else
            {
                AlertDialog.Builder alert = new AlertDialog.Builder(this);
                alert.setTitle("MyPet"); //Set Alert dialog title here
                alert.setMessage("Animal existant"); //Message here
                AlertDialog alertDialog = alert.create();
                alertDialog.show();
            }
        }
    }
    Merci de votre aide et toute critique et bonne à prendre

  2. #2
    Membre régulier
    Homme Profil pro
    ETUDIANT
    Inscrit en
    Novembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : ETUDIANT

    Informations forums :
    Inscription : Novembre 2012
    Messages : 111
    Points : 70
    Points
    70
    Par défaut
    Bonjour ,

    Pour la base de donnée par exemple : adresseBD .java
    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    package com.exe.s;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
     
    public class adresseBD 
    {
     public static final String MYDATABASE_NAME = "adresse.db";
     public static final int MYDATABASE_VERSION = 1;
     
     public static final String MYDATABASE_TABLE = "adr";
     public static final String KEY_ID = "_id";
     
     public static final String KEY_RUE = "rue";//1
     public static final String KEY_CODEPOSTALE = "codepostale";//2
     public static final String KEY_LOCALITE = "localite";//3
     public static final String KEY_NOMPRENOM = "nomprenom";
     public static final String KEY_TEL = "tel";
     
     
     
     private static final String SCRIPT_CREATE_DATABASE ="create table " + MYDATABASE_TABLE 
     + " ("
     + KEY_ID + " integer primary key , " 
     + KEY_RUE + " TEXT NOT NULL,"
     + KEY_CODEPOSTALE + " TEXT NOT NULL,"
     + KEY_LOCALITE + " TEXT NOT NULL,"
     + KEY_NOMPRENOM + " TEXT NOT NULL,"
     + KEY_TEL + " TEXT NOT NULL" +
     ");";
     
     private SQLiteHelper sqLiteHelper;
     private SQLiteDatabase sqLiteDatabase;
     private Context context;
     public adresseBD(Context c){context = c;}
     
     public adresseBD openToRead() throws android.database.SQLException {
     sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
     sqLiteDatabase = sqLiteHelper.getReadableDatabase();
     return this;}
     
     public adresseBD openToWrite() throws android.database.SQLException {
     sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
     sqLiteDatabase = sqLiteHelper.getWritableDatabase();
     return this;}
     
     public void close(){sqLiteHelper.close();}
     
    //__Ajouter:
     
     public long insert
     (String content1,String content2,String content3,String content4,String content5 )
     {
      ContentValues contentValues = new ContentValues();
     
      contentValues.put(KEY_RUE, content1);
      contentValues.put(KEY_CODEPOSTALE, content2);
      contentValues.put(KEY_LOCALITE, content3);
      contentValues.put(KEY_NOMPRENOM, content4);
      contentValues.put(KEY_TEL, content5);
      return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues);
     }
     
     public void update_byID
     (int id,String update1,String update2,String update3,String update4,String update5)
     {
      ContentValues val = new ContentValues();
     
      val.put(KEY_RUE, update1);
      val.put(KEY_CODEPOSTALE, update2);
      val.put(KEY_LOCALITE, update3);
      val.put(KEY_NOMPRENOM, update4);
      val.put(KEY_TEL, update5);
      sqLiteDatabase.update(MYDATABASE_TABLE, val, KEY_ID+"="+id, null);
     }
     
    public int deleteAll()
     {
      return sqLiteDatabase.delete(MYDATABASE_TABLE, null, null);
     }
     
     public Cursor queueAll()
     {
      String[] columns = new String[]
      {KEY_ID, KEY_RUE,KEY_CODEPOSTALE,KEY_LOCALITE,KEY_NOMPRENOM,KEY_TEL};
      Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns, null, null, null, null, null);
     
      return cursor;
     }
     
     
     public class SQLiteHelper extends SQLiteOpenHelper 
     {
      public SQLiteHelper(Context context, String name,CursorFactory factory, int version) 
      {super(context, name, factory, version);}
      @Override
      //__ creation BD :
      public void onCreate(SQLiteDatabase db) 
      { 
       db.execSQL(SCRIPT_CREATE_DATABASE);
      }
     
     
     
      @Override
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
      {}
     }
    }
    Activity.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     adresses = new adresseBD (this);adresses.openToWrite(); cursoradresse = adresses.queueAll();cursoradresse.requery();

  3. #3
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Tu as oublié de d'invoquer open() sur ton PetManage avant de faire addPet()
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  4. #4
    Membre régulier Avatar de Caranille
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    Merci beaucoup pour le ddb.open() que j'avais oublié, la honte ^^.

    Maintenant plus qu'à vérifier ma requête qui vérifie le nombre d'enregistrement car sur android y a pas de .rowCount... Snif ça ma me manque tout ça...

    Mais merci de ton aide

Discussions similaires

  1. Besoin d'aide pour une requête SQLite
    Par Ryu2000 dans le forum Android
    Réponses: 2
    Dernier message: 05/06/2012, 17h25
  2. SQLite besoin d'aide sur les commandes
    Par PyNub dans le forum Général Python
    Réponses: 2
    Dernier message: 10/10/2011, 21h18
  3. [PDO] Besoin d'aide pour gérer un fichier .db : Sqlite format 3
    Par Dadishome dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/07/2008, 15h55
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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