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
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 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 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 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 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
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; } }
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
Comme mon code plante j'ai laissé en attente une partie du listing de la 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 <?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>
//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.
Partager