Bonsoir,

Je me suis inspiré de la base de données "tuto mobile" et je l'ai adapté à mon besoin.

J'ai l'intention de dev une application pour gérer mon congélateur modèle bahut.

Le problème c'est que je n'arrive pas à interagir avec ma bd SQLite copiée d'après tuto mobile.

C'est au moment de l'ouverture de Base de Données que l'appli plante.

Quelqu'un pourrait-il vérifier mon code et le corriger Merci.

Ma classe Viandes


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 com.example.rapidego.frigo1;
 
/**
 * Created by rapidego on 16/06/2015.
 */
public class Viandes
{
    //declare les variables
    private  int id;
    private String type;
    private String etat;
    private String nombre;
    private String endroit;
 
    //constructeur vide
    public Viandes(){}
 
    //constructeur rempli
    public Viandes(String type, String etat,  String nombre, String endroit)
    {
        this.type = type;
        this.etat = etat;
        this.nombre = nombre;
        this.endroit = endroit;
 
 
    }
 
    //les différents getter et setter
    public int getId() {return id;}
    public void setId(int id) {this.id = id;}
 
    public String getType() {return type;}
    public void setType(String type) {this.type = type;}
 
    public String getEtat() {return etat;}
    public void  setEtat(String etat) {this.etat = etat;}
 
    public String getNombre() {return nombre;}
    public void setNombre(String nombre) {this.nombre = nombre;}
 
    public String getEndroit() {return  endroit;}
    public void setEndroit(String endroit) {this.endroit = endroit;}
 
    public String toString()
    {
        return "ID :" + id + "\nTYPE :" + type + "\nENDROIT :" + endroit +
                "\nETAT :" + etat + "\nNOMBRE :" + nombre;
    }
}
Ma classe MaBaseSQLite

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
 
package com.example.rapidego.frigo1;
 
/**
 * Created by rapidego on 16/06/2015.
 */
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
 
public class MaBaseSQLite extends SQLiteOpenHelper
{
 
    //variable table
    private static final String TABLE_VIANDES = "table_viandes";
 
    //variables des colonnes
    public static final String COL_ID = "ID";
    public static final String COL_TYPE = "TYPE";
    public static final String COL_ETAT = "ETAT";
    public static final String COL_COMBIEN = "COMBIEN";
    public static final String COL_ENDROIT = "ENDROIT";
 
 
    //variable de la requete ecrite
    private static final String CREATE_BDD = "CREATE TABLE" + TABLE_VIANDES + "(" +
            COL_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_TYPE + "TEXT NOT NULL, "
            + COL_ETAT + "TEXT NOT NULL, " + COL_COMBIEN + "TEXT NOT NULL, " + COL_ENDROIT +
            "TEXT NOT NULL), ;";
 
    //constructeur
    public MaBaseSQLite(Context context, String name, CursorFactory factory, int version)
    {
        super(context, name, factory, version);
    }
 
 
 
    @Override
    public void onCreate(SQLiteDatabase db) //paremetre db (objet db)
    {
        // on cree la table a partir de la requete ecrite dans la variable CREATE_BDD
        db.execSQL(CREATE_BDD);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        //On peut faire ce que l'on veut ici
        //je choisi de supprimper la table et de la recreer
 
        // comme cela lorsque je change la version les id repartent de zero
 
        //suppression
        db.execSQL("DROP TABLE" + TABLE_VIANDES + ";");
 
        //recreer la table
        onCreate(db);
 
    }
 
}
Ma base gestionBDD

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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 
package com.example.rapidego.frigo1;
 
/**
 * Created by rapidego on 16/06/2015.
 */
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
 
 
public class GestionBDD
{
    //variables
    private static final int VERSION_BDD = 1;
    private static final String NOM_BDD = "viandes.db";
 
    private static final String TABLE_VIANDES = "table_viandes";
 
    private static final String COL_ID = "ID";
    private static final int NUM_COL_ID = 0;
    private static final String COL_TYPE = "TYPE";
    private static final int NUM_COL_TYPE = 1;
    private static final String COL_ETAT = "ETAT";
    private static final int NUM_COL_ETAT = 2;
    private static final String COL_COMBIEN = "COMBIEN";
    private static final int NUM_COL_COMBIEN = 3;
    private static final String COL_ENDROIT = "ENDROIT";
    private static final int NUM_COL_ENDROIT = 4;
 
    private SQLiteDatabase bdd; // Declare objet bdd
    private MaBaseSQLite maBaseSQLite; // Declare objet maBaseSQLite
 
    //Constructeur rempli
    public GestionBDD(Context context)
    {
        //on cree la BDD et sa table
        maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);
    }
 
    public void open()
    {
        //on ouvre la bdd en ecriture
        bdd = maBaseSQLite.getWritableDatabase();
    }
 
    public void close()
    {
        //on ferme l'acces a la bdd
        bdd.close();
    }
 
    public SQLiteDatabase getBdd()
    {
        return  bdd;
    }
 
    public long insertViandes(Viandes viandes)
    {
        //creation d'un ContentValues (fonctionne comme une HashMap
        ContentValues values = new ContentValues();
        //On lui ajoute une valeur associee a une clef (qui est le nom de la colonne
        //dans laquelle on veut mettre la valeur.
 
        values.put(COL_TYPE, viandes.getType());
        values.put(COL_ETAT, viandes.getEtat());
        values.put(COL_COMBIEN, viandes.getNombre());
        values.put(COL_ENDROIT, viandes.getEndroit());
 
        //On insere l'objet dans la BDD via le ContentValues
        return bdd.insert(TABLE_VIANDES, null, values);
    }
 
    public int upDateViandes(int id, Viandes viandes)
    {
        // la mise a jour de la viande dans la BDD fonctionne plus ou moins
        //comme une insertion
        // Il faut simplement preciser quelle viande il faut mettre a jour
        // grace a l'ID
 
        ContentValues values = new ContentValues();
        values.put(COL_TYPE, viandes.getType());
        values.put(COL_ETAT, viandes.getEtat());
        values.put(COL_COMBIEN, viandes.getNombre());
        values.put(COL_ENDROIT, viandes.getEndroit());
        return bdd.update(TABLE_VIANDES, values, COL_ID + " = " + id, null);
    }
 
    public int removeViandesWithdID(int id)
    {
        //suppression d'une viande de la BDD grace a l'ID
        return bdd.delete(TABLE_VIANDES, COL_ID + " = " + id, null);
    }
 
    public Viandes getViandesWithTitre(String titre)
    {
        //Recupere dans un cursor les valeurs correspondant à une viandes contenu
        // dans la BDD (ici on selectionne la viande grace a son titre)
        Cursor c = bdd.query(TABLE_VIANDES, new String[]{COL_ID, COL_TYPE, COL_ETAT,
                        COL_COMBIEN, COL_ENDROIT}, COL_TYPE + " LIKE\"" + titre + "\"", null, null,
                null, null);
        return  cursorToViandes(c);
    }
 
    //Cette methode permet de convertire un cursor en une viande
    private Viandes cursorToViandes(Cursor c)
    {
        //Si aucun element n'a ete trouve dans la requete, on renvoie null.
        if (c.getCount() == 0)
            return null;
 
        //Sinon on se place sur le premier element
        c.moveToFirst();
        //On cree  une viande
        Viandes viandes = new Viandes();
 
        //On lui affecte toutes les infos grace aux infos contenues dans le Cursor
        viandes.setId(c.getInt(NUM_COL_ID));
        viandes.setType(c.getString(NUM_COL_TYPE));
        viandes.setEtat(c.getString(NUM_COL_ETAT));
        viandes.setNombre(c.getString(NUM_COL_COMBIEN));
        viandes.setEndroit(c.getString(NUM_COL_ENDROIT));
 
        //On ferme le Cursor
        c.close();
 
        //On retourne le viande
        return viandes;
 
 
    }
 
}
Ma classe MainActivity

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
 
package com.example.rapidego.frigo1;
 
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.Toast;
import android.view.Menu;
import android.view.MenuItem;
 
 
public class MainActivity extends ActionBarActivity
{
 
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        //Creation d'une instance de la classe GestionBDD(creer la Bdd)
         GestionBDD bddViandes = new GestionBDD(this);
 
        //On ouvre la base de donnees
        bddViandes.open();
 
        //Creation d'une ligne pour une viande
        Viandes decoupe = new Viandes("boeuf", "cote", "4", "BG");
 
        //creation et insertion d'une viande
        bddViandes.insertViandes(decoupe);
 
         /*Pour verifier si on a bien creer notre decoupe dans la BDD
        *on extrait la decoupe de la BDD grace au titre de la decoupe
        que l'on a creer precedemment */
        Viandes decoupePourBdd = bddViandes.getViandesWithTitre(decoupe.getType());
 
        //Si une decoupe est retournee (donc si la decoupe a bien ete ajoutee a la Bdd
        //ici on affiche les infos de la decoupe dans un toast
         if (decoupePourBdd != null)
            {
                 Toast.makeText(this, decoupePourBdd.toString(), Toast.LENGTH_LONG).show();
            }
    }
 
    //*********************en attente**********************
 
    //Creation d'une instance de la classe GestionBDD(creer la Bdd)
    // final GestionBDD bddViandes = new GestionBDD(this);
 
    //On ouvre la base de donnees
    // bddViandes.open();
    //Creation d'une ligne pour une viande
    // Viandes decoupe = new Viandes("boeuf", "cote", 4, "BG");
    // bddViandes.insertViandes(decoupe);
         /*Pour verifier si on a bien creer notre decoupe dans la BDD
        *on extrait la decoupe de la BDD grace au titre de la decoupe
        que l'on a creer precedemment */
    //Viandes decoupePourBdd = bddViandes.getViandesWithTitre(decoupe.getType());
    //Si une decoupe est retournee (donc si la decoupe a bien ete ajoutee a la Bdd
    //ici on affiche les infos de la decoupe dans un toast
    // if (decoupePourBdd != null)
    // {
    //     Toast.makeText(this, decoupePourBdd.toString(), Toast.LENGTH_LONG).show();
    // }
 
    //*******************en attente***********************
 
    //appel du bouton creer dans activity_main.xml
  //  boutonCreer = (Button)findViewById(R.id.creer);
 
    //mise en place d'un ecouteur
  //  boutonCreer.setOnClickListener(new OnClickListener()
//{
  // @Override
  //  public void onClick(View view)
   // {
 
   // }
//});
 
 
 
 
 
//************partie menu**********************************************************
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings)
        {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
}

Mon fichier Manifest


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
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.rapidego.frigo1" >
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
    </application>
 
</manifest>
Comme mon code plante j'ai laissé en attente une partie du listing de la classe MainActivity.

//On ouvre la base de donnees
bddViandes.open();
C'est quand je lance cette commande open que les choses se gâtent.

Merci de bien vouloir me conseiller.