Bonjour,

Je souhaite afficher les données d'une base de données dans une ListView (à priori rien de méchant).

Voici les éléments de mon code :

J'ai une classe pour créer la base de données :
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
 
public class FavoriteOpenHelper extends SQLiteOpenHelper {
	public static final String TABLE_FAV = "favorites_table";
	public static final String COL_ID = "ID";
	public static final String COL_CITY = "City";
	public static final String COL_COUNTRY = "Country";
 
	public static final String CREATE_BDD = "CREATE TABLE " + TABLE_FAV + " (" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_CITY + " TEXT NOT NULL, " + COL_COUNTRY + " TEXT NOT NULL); ";
 
	public FavoriteOpenHelper(Context context, String name, CursorFactory factory, int version) {
		super(context, name, factory, version);
	}
 
	@Override
	public void onCreate(SQLiteDatabase db) {
		//on créé la table à partir de la requête écrite dans la variable CREATE_BDD
		db.execSQL(CREATE_BDD);
	}
 
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//On peut fait ce qu'on veut ici moi j'ai décidé de supprimer la table et de la recréer
		//comme ça lorsque je change la version les id repartent de 0
		db.execSQL("DROP TABLE " + TABLE_FAV + ";");
		onCreate(db);
	}
Ensuite j'ai une classe pour définir la base de données :
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
public class FavoritesBDD {
 
	public static final int VERSION_BDD = 1;
	private static final String NOM_BDD = "favorites.db";
 
	private static final String TABLE_FAV = "favorites_table";
	private static final String COL_ID = "ID";
	private static final int NUM_COL_ID = 0;
	private static final String COL_CITY = "City";
	private static final int NUM_COL_CITY = 1;
	private static final String COL_COUNTRY = "Country";
	private static final int NUM_COL_COUNTRY = 2;
 
	private SQLiteDatabase bdd;
	private FavoriteOpenHelper favoriteOpenHelper;
 
	public FavoritesBDD(Context context){
		favoriteOpenHelper = new FavoriteOpenHelper(context, NOM_BDD, null, VERSION_BDD);
	}
 
	public void open(){
		bdd = favoriteOpenHelper.getWritableDatabase();
	}
 
	public void read(){
		bdd = favoriteOpenHelper.getReadableDatabase();
	}
 
	public void close(){
		bdd.close();
	}
 
	public SQLiteDatabase getBDD(){
		return bdd;
	}
 
	public long insertFavorite(Favorite favorite){
		ContentValues values = new ContentValues();
		values.put(COL_CITY, favorite.getCity());
		values.put(COL_COUNTRY, favorite.getCountry());
		return bdd.insert(TABLE_FAV, null, values);
	}
 
	public int updateFavorite(int id, Favorite favorite){
		ContentValues values = new ContentValues();
		values.put(COL_CITY, favorite.getCity());
		values.put(COL_COUNTRY, favorite.getCountry());
		return bdd.update(TABLE_FAV, values, COL_ID + " = "+id, null);
	}
 
	public int removeFavorite(int id){
		return bdd.delete(TABLE_FAV, COL_ID + " = "+id, null);
	}
 
 
	public Cursor queueAll(){
		String[] column = new String[]{COL_CITY, COL_COUNTRY};
		Cursor c = bdd.query(TABLE_FAV, column, null, null, null, null, null);
		return c;
	}
 
	public int deleteAll(){
		return bdd.delete(TABLE_FAV, null, null);
	}
 
	public Favorite getFavoriteWithCity(String city){
		Cursor c = bdd.query(TABLE_FAV, new String [] {COL_ID, COL_CITY, COL_COUNTRY}, COL_CITY + " LIKE \"" + city + "\"", null, null, null, null);
		return cursorToFavorite(c);
	}
 
	private Favorite cursorToFavorite(Cursor c){
		if (c.getCount() == 0)
			return null;
		c.moveToFirst();
		Favorite favorite = new Favorite();
		favorite.setId(c.getInt(NUM_COL_ID));
		favorite.setCity(c.getString(NUM_COL_CITY));
		favorite.setCountry(c.getString(NUM_COL_COUNTRY));
		c.close();
		return favorite;
	}
 
 
}
Puis dans mon activité principale, j'affecte des données a la bdd. Puis je récupère ces données avec un Cursor que je lie à la listView via un SimpleCursorAdapter :
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
 
         favorite_cities = (ListView) findViewById(R.id.favorites);
         FavoritesBDD bdd = new FavoritesBDD(this);
 
        /* Fill the bdd */
        bdd.open();
		bdd.deleteAll();
		bdd.insertFavorite(new Favorite("Paris", "France"));
		bdd.insertFavorite(new Favorite("Nice", "France"));
		bdd.insertFavorite(new Favorite("Bordeaux", "France"));
		bdd.insertFavorite(new Favorite("Bergerac", "France"));
		bdd.insertFavorite(new Favorite("New York", "United States"));
		bdd.insertFavorite(new Favorite("Dublin", "Ireland"));
		bdd.insertFavorite(new Favorite("Milan", "Italy"));
		bdd.insertFavorite(new Favorite("London", "United Kingdoms"));
 
        bdd.close();
 
        /* Read the bdd */
        bdd.read();
        Cursor c = bdd.queueAll();
        startManagingCursor(c);
 
        String[] from = new String[]{FavoriteOpenHelper.COL_CITY, FavoriteOpenHelper.COL_COUNTRY};
        int[] to = new int[]{R.id.city, R.id.country};
 
 
        /* Display the bdd */
        SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this.getBaseContext(), R.layout.item, c, from, to);
        favorite_cities.setAdapter(mAdapter);
 
        bdd.close();
Concernant ma listView elle est définie dans le main.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<ListView
	    android:id="@+id/favorites"
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
	    android:layout_marginLeft="20dp"
	    android:layout_weight="1"
	    android:footerDividersEnabled="false"
	    android:headerDividersEnabled="true" >
 
	</ListView>
Et j'ai un layout pour chaque item de la liste :
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
 
 
    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:padding="10px"
        android:scaleType="matrix" />
 
	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    android:orientation="vertical"
	    android:layout_width="fill_parent"
	    android:layout_height="wrap_content"
	   	android:layout_gravity="center_vertical"
	   	android:paddingLeft="10px"
	    android:layout_weight="1"
	    >
 
	    <TextView android:id="@+id/city"
	         android:layout_width="fill_parent"
	         android:layout_height="fill_parent"
	         android:textSize="16px"
	         android:textStyle="bold"
	         />
 
	    <TextView android:id="@+id/country"
	         android:layout_width="fill_parent"
	         android:layout_height="fill_parent"
	         />
 
    </LinearLayout>
 
</LinearLayout>
Normalement, ca devrait fonctionner ! J'ai verifié avec sqlite3 que ma bdd existait bien et qu'elle contenait les données insérées. Pas d'erreur de compilation, mais quand je lance l'application, elle crashe (The application has stopped unexpectedly. Please try again).

La je bloque. Est-ce que quelqu'un pourrait m'aider ?



Merci
PS: Je précise que je débute sur le sdk android donc merci de votre indulgence !