Bonjour,

Je tente depuis plusieurs jours à créer une application dans laquelle je puisse afficher une Listview dans laquelle est affichée des nom/prénom/poste/email/tel de personnes. Et ensuite pouvoir cliquer sur un des item pour voir la fiche détaillée de cette personne.
J'ai réussi à créer la bdd et la table. Mais je bloque sur l'affichage de la vue (ListView) notamment avec la partie adapter/cursor que je n'ai pas compris.

Si quelqu'un pouvait m'aider, je lui en serais très reconnaissant.

Voici mes différentes Activity:

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
public class MaBaseSQLite extends SQLiteOpenHelper {
 
	private static final String TABLE_EMPLOYES = "table_employes";
 
	private static final String COL_ID = "ID";
	private static final String COL_NOM = "Nom";
	private static final String COL_PRENOM = "Prenom";
	private static final String COL_ROLE = "Role";
	private static final String COL_POSTE = "Poste";
	private static final String COL_TELEPHONE = "Telephone";
	private static final String COL_EMAIL = "Email";
 
	private static final String REQUETE_CREATION_BD = "CREATE TABLE " + TABLE_EMPLOYES + " ("
	+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_NOM + " TEXT NOT NULL, "
	+ COL_PRENOM + " TEXT, " + COL_ROLE + " TEXT NOT NULL, " + COL_POSTE + " TEXT NOT NULL, " + COL_TELEPHONE + " TEXT, "
	+ COL_EMAIL + " TEXT);";
 
	public MaBaseSQLite(Context context, String name, CursorFactory cursorfactory, int version) {
		super(context, name, cursorfactory, version);
	}
 
	@Override
	public void onCreate(SQLiteDatabase db) {
		//on créé la table à partir de la requête écrite dans la variable CREATE_BDD
		db.execSQL(REQUETE_CREATION_BD);
	}
 
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("DROP TABLE" + TABLE_EMPLOYES + ";");
		onCreate(db);
	}	
}
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
public class Employe {
	//création du constructeur ainsi que des getter et des setter
 
	private int id;
	private String nom;
	private String prenom;
	private String telephone;
	private String poste;
	private String role;
	private String email;
 
	public Employe(){}
 
	public Employe(String nom, String prenom, String telephone, String poste, String role, String email){
		this.nom = nom;
		this.prenom = prenom;
		this.telephone = telephone;
		this.poste = poste;
		this.role = role;
		this.email = email;
	}
 
 
	//id
	public int getId() {
		return id;
	}
 
	public void setId(int id) {
		this.id = id;
	}
 
 
	//nom
	public String getNom() {
		return nom;
	}
 
	public void setNom(String nom) {
		this.nom = nom;
	}
 
 
	//prenom
	public String getPrenom() {
		return prenom;
	}
 
	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}	
 
	//telephone
	public String getTelephone() {
		return telephone;
	}
 
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}	
 
	//poste
	public String getPoste() {
		return poste;
	}
 
	public void setPoste(String poste) {
		this.poste = poste;
	}
 
	//role
	public String getRole() {
		return role;
	}
 
	public void setRole(String role) {
		this.role = role;
	}	
 
	//email
	public String getEmail() {
		return email;
	}
 
	public void setEmail(String email) {
		this.email = email;
	}
 
 
	public String toString(){
		return "ID : "+id+"\nNOM : "+nom+"\nPRENOM : "+prenom+"\nTELEPHONE : "+telephone+"\nPOSTE : "
				+poste+"\nROLE : "+role+"\nEMAIL : "+email;
	}
}
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
public class EmployesBDD {
 
		//permet de gérer l’insertion, la suppression, la modification des employes dans la BDD et de faire des requêtes pour récupérer un employé contenu dans la BDD
 
	/*
	 * création d'une couche d'abstraction afin de proposer des méthodes d'accès et de manipulation simplifiées à la bbd
	 * et d'apporter une indépendance vis-à-vis de la source de données. Si, par ex, on souhaite changer de type de source, 
	 * et travailler avec des services internet ou des fichiers, alors il ne faudra changer que le code de cette 
	 * classe d'abstraction
	 */
 
		private static final int VERSION_BDD = 1;
		private static final String NOM_BDD = "ditimi.db";
 
		private static final String TABLE_EMPLOYES = "table_employes";
 
		private static final String COL_ID = "ID";
		private static final int NUM_COL_ID = 0;
		private static final String COL_NOM = "Nom";
		private static final int NUM_COL_NOM = 1;
		private static final String COL_PRENOM = "Prenom";
		private static final int NUM_COL_PRENOM = 2;
		private static final String COL_ROLE = "Role";
		private static final int NUM_COL_ROLE = 3;
		private static final String COL_POSTE = "Poste";
		private static final int NUM_COL_POSTE = 4;
		private static final String COL_TELEPHONE = "Telephone";
		private static final int NUM_COL_TELEPHONE = 5;
		private static final String COL_EMAIL = "Email";
		private static final int NUM_COL_EMAIL = 6;
 
 
		//l'instance de la bdd qui sera manipulée au travers de cette classe
		private SQLiteDatabase bdd;
 
		private MaBaseSQLite maBaseSQLite;
 
		public EmployesBDD(Context context){
			//On créer la BDD et sa table
			maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);
		}
 
 
		//on ouvre la BDD en écriture
		public SQLiteDatabase open(){
			bdd = maBaseSQLite.getWritableDatabase();
			return bdd;
		}
 
		//on ferme l'accès à la BDD
		public void close(){
			bdd.close();
		}
 
 
		public SQLiteDatabase getBDD(){
			return bdd;
		}
 
		//récupère un employé en fonction de son nom
		public Employe getEmploye(String nom) {
			Cursor c = bdd.query(TABLE_EMPLOYES, new String[]{
					COL_ID, COL_NOM, COL_PRENOM, COL_POSTE, COL_ROLE, COL_EMAIL, COL_TELEPHONE},
					null, null, null, COL_NOM + " LIKE " + nom, null);
			return cursorToEmploye(c);
		}
 
		//récupère un employé en fonction de son id
		public Employe getEmploye(int id) {
			Cursor c = bdd.query(TABLE_EMPLOYES, new String[]{
					COL_ID, COL_NOM, COL_PRENOM, COL_POSTE, COL_ROLE, COL_EMAIL, COL_TELEPHONE},
					null, null, null, COL_ID + " LIKE " + id, null);
			return cursorToEmploye(c);
		}
 
		//supprime un employé à partir de son id (normalement boolean au lieu de int ?)
		public int removeEmployeWithID(int id){
			//Suppression d'un employé de la BDD grâce à l'ID
			return bdd.delete(TABLE_EMPLOYES, COL_ID + " = " +id, null);
		}
 
		//la méthode cursorToEmployes permet de transformer le curseur de résultat en objet métier
		private Employe cursorToEmploye (Cursor c) {
			//si la requête ne renvoie pas de résultat
			if (c.getCount() == 0)
				return null;
 
			Employe retEmploye = new Employe();
			//extraction des valeurs depuis le curseur
			retEmploye.setId(c.getInt(NUM_COL_ID));
			retEmploye.setNom(c.getString(NUM_COL_NOM));
			retEmploye.setPrenom(c.getString(NUM_COL_PRENOM));
			retEmploye.setRole(c.getString(NUM_COL_ROLE));
			retEmploye.setPoste(c.getString(NUM_COL_POSTE));
			retEmploye.setTelephone(c.getString(NUM_COL_TELEPHONE));
			retEmploye.setEmail(c.getString(NUM_COL_EMAIL));
			//ferme le curseur pour libérer les ressources
			c.close();
			return retEmploye;
		}
 
		//retourne tous les employés de la bdd
		public ArrayList<Employe> getAllEmploye(){
			Cursor c = bdd.query(TABLE_EMPLOYES, new String[]{
					COL_ID, COL_NOM, COL_PRENOM, COL_POSTE, COL_ROLE, COL_EMAIL, COL_TELEPHONE},
					null, null, null, null, null);
			return cursorToEmployes(c);
		}
 
 
		private ArrayList<Employe> cursorToEmployes(Cursor c) {
			//si la requête ne renvoie pas de résultat
			if (c.getCount() == 0)
				return new ArrayList<Employe>(0);
 
			ArrayList<Employe> retEmployes = new ArrayList<Employe>(c.getCount());
			c.moveToFirst();
			do {
				Employe employe = new Employe();
				employe.setId(c.getInt(NUM_COL_ID));
				employe.setNom(c.getString(NUM_COL_NOM));
				employe.setPrenom(c.getString(NUM_COL_PRENOM));
				employe.setRole(c.getString(NUM_COL_ROLE));
				employe.setPoste(c.getString(NUM_COL_POSTE));
				employe.setTelephone(c.getString(NUM_COL_TELEPHONE));
				employe.setEmail(c.getString(NUM_COL_EMAIL));
				retEmployes.add(employe);
			} while (c.moveToNext());
			//ferme le curseur pour libérer les ressources
			c.close();
			return retEmployes;
		}
 
 
		//insérer un employé dans la table des employés (code en {} à vérifier)
		public long insertEmploye(Employe employe){
			//Création d'un ContentValues (fonctionne comme une HashMap)
			ContentValues values = new ContentValues();
			//on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
			values.put(COL_NOM, employe.getNom());
			values.put(COL_PRENOM, employe.getPrenom());
			values.put(COL_ROLE, employe.getRole());
			values.put(COL_POSTE, employe.getPoste());
			values.put(COL_TELEPHONE, employe.getTelephone());
			values.put(COL_EMAIL, employe.getEmail());
			//on insère l'objet dans la BDD via le ContentValues
			return bdd.insert(TABLE_EMPLOYES, null, values);
		}
 
 
		//mettre à jour un employé dans la table des employés (code en {} à vérifier)
		public int updateEmploye(int id, Employe employeToUpdate){
			//La mise à jour d'un employé dans la BDD fonctionne plus ou moins comme une insertion
			//il faut simple préciser quel employé on doit mettre à jour grâce à l'ID
			ContentValues values = new ContentValues();
			values.put(COL_NOM, employeToUpdate.getNom());
			values.put(COL_PRENOM, employeToUpdate.getPrenom());
			values.put(COL_ROLE, employeToUpdate.getRole());
			values.put(COL_POSTE, employeToUpdate.getPoste());
			values.put(COL_TELEPHONE, employeToUpdate.getTelephone());
			values.put(COL_EMAIL, employeToUpdate.getEmail());
			return bdd.update(TABLE_EMPLOYES, values, COL_ID + " = " +id, null);
		}
 
 
		//je ne sais pas si je dois laisser cette dernière partie dans cette activity
 
		private class MaBaseSQLIte extends SQLiteOpenHelper {
 
			public MaBaseSQLIte(Context context, String name,
					CursorFactory cursorfactory, int version) {
				super(context, name, cursorfactory, version);
				// TODO Auto-generated constructor stub
			}
 
			@Override
			public void onCreate(SQLiteDatabase db) {
				// TODO Auto-generated method stub
 
			}
 
			@Override
			public void onUpgrade(SQLiteDatabase db, int oldVersion,
					int newVersion) {
				// TODO Auto-generated method stub
 
			}
 
 
		}
 
	}
et ma classe d'affichage dans laquelle j'ai testé de grands nombres de possiblité d'adpater/cursor

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
public class DicSqlActivity extends ListActivity {
 
	private EmployesBDD employeBdd;
	private static final String TABLE_EMPLOYES = "table_employes";
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        //Création d'une instance de ma classe EmployesBDD
        employeBdd = new EmployesBDD(this);
 
        //On ouvre la base de données pour écrire dedans
        employeBdd.open();      
 
	}
 
   /*     
//j'amagine que je dois mettre mon cursor ici, voici une des bêtises que j'ai écrit
        
    public ArrayList<Employe> getAllEmploye(){
    	return getAllEmploye();
    }
*/
 
 
    @Override
    protected void onDestroy()
    {
        if (employeBdd != null)
        {
        	employeBdd.close();
        }
        super.onDestroy();
    }
}
Je ne comprends pas comment afficher les résultats dans cette activity
J'ai tenté pleins de choses pour finalement revenir en arrière pour comprendre ce que je fais et réussir à afficher ma listview. Sans résultat.

Je suis un peu perdu. J'espère que l'un d'entre vous pourra m'aider. J'espère que la méthode de travail choisi (séparation en plusieurs class) est utile et judicieuse.

Merci.