Bonjour a tous, dans le cadre de notre PPE, nous voulons réaliser uneapploication android plutot simple (pour une boulangerie) qui consiste a afficher les produits, et d'autres choses, mais nous nous concentrons d'abord sur l'affichage des éléments, toutefois, pour cela, nous sommes confrontés a un soucis. En effet, rien ne s'affiche dans la listView, et j'ai du mal a trouve la source du probleme, voici mes classes :
Classe DAOBase :
Classe DataBaseHandler :
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 import android.content.Context; import android.database.sqlite.SQLiteDatabase; public abstract class DAOBase { // Nous sommes la premiere version de la base //Si je décide de la mettre a jour, il faut changer cet attribut protected final static int VERSION = 1; //Nom du fichier de ma base protected final static String NOM = "produits.db"; protected static SQLiteDatabase mDb = null; protected DatabaseHandler mHandler = null; public DAOBase(Context pContext) { this.mHandler = new DatabaseHandler (pContext, NOM, null, VERSION); } public SQLiteDatabase open() { //Pas besoin de fermer la derniere base puisque getWritableDatabase s'en charge mDb = mHandler.getWritableDatabase(); return mDb; } public void close() { mDb.close(); } public SQLiteDatabase getDb() { return mDb; } }
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 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 PRODUITS_KEY = "_id"; //on donne les attributs en string public static final String PRODUITS_NOM = "nomProd"; public static final String PRODUITS_DESCRIPTION = "description"; public static final String PRODUITS_PRIX = "prix"; public static final String PRODUITS_IMAGE = "image"; public static final String PRODUITS_TABLE_NAME = "produits"; // script SQLite de création de la base en fct des attributs plus hauts public static final String PRODUITS_TABLE_CREATE = "CREATE TABLE " + PRODUITS_TABLE_NAME + " (" + PRODUITS_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT , " + PRODUITS_NOM + " TEXT, " + PRODUITS_DESCRIPTION + " TEXT, " + PRODUITS_PRIX + " REAL, " + PRODUITS_IMAGE + "TEXT);"; // script de suppression "drop table" public static final String PRODUITS_TABLE_DROP = "DROP TABLE IF EXISTS " + PRODUITS_TABLE_NAME +";"; public DatabaseHandler(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(PRODUITS_TABLE_CREATE); // } @Override public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) { db.execSQL(PRODUITS_TABLE_DROP); // this.onCreate(db); // TODO Auto-generated method stub } }
Classe Produits :
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 import test.premiere_app.R; import android.os.Bundle; import android.app.Activity; import android.widget.ListView; public class MainActivity extends Activity { private ListView lstViewProduits ; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Produits unProduit = new Produits(1, "PremierProduit", "Pour tester", 1, "fichier.txt"); ProduitsDAO.ajouter(unProduit); lstViewProduits=(ListView) findViewById (R.id.lstViewProduits); this.displayProduits(); } public void displayProduits() { final ProduitsAdapter produitsAdapter = new ProduitsAdapter (this, ProduitsDAO.selectionnerAll() ); lstViewProduits.setAdapter(produitsAdapter); } }
Classe ProduitsAdapter :
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 public class Produits { private long _id; //on définit les attributs de façon classique private String nomProd; private String description; private float prix; private String image; public Produits(long _id, String nomProd, String description, float prix, String image) { super(); //on appelle le super et on fait le constructeur de façon normale this.set_id(_id); this.setNomProd(nomProd); this.setDescription(description); this.setPrix(prix); this.setImage(image); } //on fait tout les getters et setters public long get_id() { return _id; } public void set_id(long _id) { this._id = _id; } public String getNomProd() { return nomProd; } public void setNomProd(String nomProd) { this.nomProd = nomProd; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public float getPrix() { return prix; } public void setPrix(float prix) { this.prix = prix; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } // a faire pour chaque table }
Classe ProduitsDAO :
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 import java.util.ArrayList; import test.premiere_app.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; public class ProduitsAdapter extends ArrayAdapter<Produits> { /*******************************************************/ /** ATTRIBUTS. /*******************************************************/ private final ArrayList<Produits> lstProduits = new ArrayList<Produits>(); private Context context; /*******************************************************/ /** METHODES / FONCTIONS. /*******************************************************/ /** * Constructeur. * @param context * @param lstProduits */ public ProduitsAdapter(final Context context, final ArrayList<Produits> lstProduits) { super(context, android.R.id.text1, lstProduits); this.context = context; this.lstProduits.clear(); this.lstProduits.addAll(lstProduits); } @Override public View getView(final int position, final View convertView, final ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.item_produits, null); } final Produits produit = lstProduits.get(position); if (produit != null) { final TextView txtProduitNom = (TextView) view.findViewById(R.id.produitNom); final TextView txtProduitPrix = (TextView) view.findViewById(R.id.produitPrix); txtProduitNom.setText(produit.getNomProd()); txtProduitPrix.setText("" + produit.getPrix()); } return view; } }
Main_activity.xml
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 import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; public class ProduitsDAO extends DAOBase { public ProduitsDAO(Context pContext) { super(pContext); // TODO Auto-generated constructor stub } public static final String TABLE_NAME = "produits"; //la table s'appelle produits public static final String KEY = "_id"; //l'id est _id, on le définit en string public static final String NOM = "nomProd"; //ainsi de suite public static final String DESCRIPTION = "description"; public static final String PRIX = "prix"; public static final String IMAGE = "image"; //on définit un string qui contient la syntaxe SqLite de création de la base public static final String TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + " (" + KEY + " INTEGER PRIMARY KEY AUTOINCREMENT , " + NOM + " TEXT, " + DESCRIPTION + " TEXT, " + PRIX + " REAL, " + IMAGE + "TEXT);"; // public static final String TABLE_DROP = "DROP TABLE IF EXISTS " + TABLE_NAME + ";"; // on définit des methodes qui permettront d'effectuer les requetes directement par envoi en paramaètre public static void ajouter (Produits p) { // Code et requetes d'insertions ContentValues value = new ContentValues();// on définit une préparation pour l'injection dans une requete insert value.put(ProduitsDAO.KEY, p.get_id()); value.put(ProduitsDAO.NOM, p.getNomProd()); // correspondance entre les attributs de l'objet Produits et les propriétés de la table (1 à 1) value.put(ProduitsDAO.DESCRIPTION,p.getDescription()); value.put(ProduitsDAO.PRIX, p.getPrix()); value.put(ProduitsDAO.IMAGE, p.getImage()); mDb.insert(ProduitsDAO.TABLE_NAME,null, value); //on insère dans la table } public void modifier (Produits p) //on donne un objet en parametre, pour qu'il soit modifié { // Code et requetes de suppression ContentValues value = new ContentValues(); value.put(ProduitsDAO.NOM, p.getNomProd()); //on donne l'attribut dans sa forme string et on appelle la fct p.get de l'attribut value.put(ProduitsDAO.DESCRIPTION,p.getDescription()); value.put(ProduitsDAO.PRIX, p.getPrix()); value.put(ProduitsDAO.IMAGE, p.getImage()); // script "automatisé" de modification d'un objet mDb.update(ProduitsDAO.TABLE_NAME, value, KEY + " = ?", new String[] {String.valueOf(p.get_id())}); } public void supprimer (int _id) { // Code et requetes de suppression mDb.delete(ProduitsDAO.TABLE_NAME, KEY + " = ?", new String[] {String.valueOf(_id)}); } public Produits selectionner (int _id) //afficher un produit dont on donne l'id en parametre { Produits p = new Produits(0, null, null, 0, null); //on définit un objet avec des valeurs "nulles" // Cursor c = mDb.rawQuery("select * from " + ProduitsDAO.TABLE_NAME + " where " + ProduitsDAO.KEY + " = ? ", new String[] {String.valueOf(_id)} ); c.moveToFirst(); p.set_id(c.getLong(0)); p.setNomProd(c.getString(0)); p.setDescription(c.getString(0)); p.setPrix(c.getFloat(0)); p.setImage(c.getString(0)); c.close(); return p; } public static ArrayList<Produits> selectionnerAll () //template de produits, pour tous les afficher { Produits p; //nouvel objet // ArrayList<Produits> mesProduits = new ArrayList<Produits>(); //nouvelle instance Cursor c = mDb.rawQuery("select * from " + ProduitsDAO.TABLE_NAME + ";", null ); //requete SQLite for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) //boucle for avec des fonction pré-faites qui va du premier élément au dernier { p = new Produits(0, null, null, 0, null); //on définit un objet avec des valeurs nulles p.set_id(c.getLong(0)); //et pour chaque attribut on récup les valeurs p.setNomProd(c.getString(0)); p.setDescription(c.getString(0)); p.setPrix(c.getFloat(0)); p.setImage(c.getString(0)); mesProduits.add(p); // on rajoute le produit a la liste } c.close(); //on ferme le curseur return mesProduits; //et on affiche tout :) } }
item_produits.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/lstViewProduits" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
Et enfin, un screen de ce qui est affiché :
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 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/produitNom" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textStyle="bold" /> <TextView android:id="@+id/produitPrix" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
Si vous voulez d'autres infos, dites le, sinon si je dois utiliser des balises Spoil dites le, mais je sais pas ou elles se trouvent.
Merci d'avance, il faudrait vraiment que nous avancions sur ce projet, car en étant bloqué la, nous perdons du temps...
Merci encore!
Partager