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 :
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 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
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 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
 
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 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
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 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
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;
    }
}
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
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 :)
	}
 
 
}
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
<?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>
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
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>
Et enfin, un screen de ce qui est affiché :



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!