Bonjour,

J'essaie de sélectionner les données d'une table pour les envoyer à un serveur mais je bute sur l'erreur suivante :
18:47:41.218: E/Cursor(1849): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.malambi.beamme/databases/geolocalisation.db, table = null, query = SELECT id_commands,commande FROM commandes
08-19 18:47:41.218: E/Cursor(1849): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
08-19 18:47:41.218: E/Cursor(1849): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
08-19 18:47:41.218: E/Cursor(1849): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
08-19 18:47:41.218: E/Cursor(1849): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
08-19 18:47:41.218: E/Cursor(1849): at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315)
08-19 18:47:41.218: E/Cursor(1849): at com.malambi.beamme.network.SendData.run(SendData.java:62)
08-19 18:47:41.218: E/Cursor(1849): at java.util.Timer$TimerImpl.run(Timer.java:289)
08-19 18:47:41.248: E/Database(1849): close() was never explicitly called on database '/data/data/com.malambi.beamme/databases/geolocalisation.db'
08-19 18:47:41.248: E/Database(1849): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
08-19 18:47:41.248: E/Database(1849): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
08-19 18:47:41.248: E/Database(1849): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
08-19 18:47:41.248: E/Database(1849): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
08-19 18:47:41.248: E/Database(1849): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
08-19 18:47:41.248: E/Database(1849): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:554)
08-19 18:47:41.248: E/Database(1849): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
08-19 18:47:41.248: E/Database(1849): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
08-19 18:47:41.248: E/Database(1849): at com.malambi.beamme.database.CoordonneesHandler.open(CoordonneesHandler.java:31)
08-19 18:47:41.248: E/Database(1849): at com.malambi.beamme.network.SendData.run(SendData.java:60)
08-19 18:47:41.248: E/Database(1849): at java.util.Timer$TimerImpl.run(Timer.java:289)
voici mon code :
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
@Override
    public void run() {
        // TODO Auto-generated method stub
        String cmd = "SELECT  " + DataLog.COMMANDS_ID + "," + DataLog.TYPE_COMMANDS + " FROM " + DataLog.TABLE_COMMANDS  ;
 
        String gpos = "SELECT "  + DataLog.COLUMN_LATITUDE +  ","  + DataLog.COLUMN_LONGITUDE + "," + DataLog.COLUMN_VITESSE + "," 
                + DataLog.COLUMN_ALTITUDE  + "," + DataLog.COLUMN_DIRECTION + "," + DataLog.COLUMN_DATE + "," + DataLog.COLUMN_SAT + "FROM " + DataLog.TABLE_COORDONNEES
                + " WHERE sat >= 3 AND SEND = 0 " + " ORDER BY  " + DataLog.COLUMN_DATE + "  DESC LIMIT 1";
 
        CoordonneesHandler handler = new CoordonneesHandler(context) ;
        Infos infos = new Infos(context) ;
        handler.open() ;
 
        Cursor cursor = handler.dbConn.rawQuery(cmd, null) ;
        Log.v("curseur", "Cursor " + cursor);
 
        if(cursor.getCount() == 0){
 
            Log.v("logger", "log vide ");
        }
 
        while (cursor.moveToNext()) {
 
            int idCmd = cursor.getInt(DataLog.NUM_COMMANDS_ID) ;
            int mCmd = cursor.getInt(DataLog.NUM_TYPE_COMMANDS) ; 
 
            Log.v("IdCmd", "id commande " + idCmd);
            Log.v("mcmd", "Commande lue " + mCmd);
 
            switch(mCmd){
 
            case SocketObserver.GPOS :
 
                Helper helper = new Helper() ;
 
 
                Cursor curseur = handler.dbConn.rawQuery(gpos, null) ;
 
                if (curseur.moveToFirst()) {
 
                    id = curseur.getInt(DataLog.NUM_COLUMN_ID);
                    latitude = curseur.getString(DataLog.NUM_COLUMN_LATITUDE) ;
                    longitude = curseur.getString(DataLog.NUM_COLUMN_LONGITUDE) ;
                    vitesse = curseur.getString(DataLog.NUM_COLUMN_VITESSE) ;
                    altitude = curseur.getString(DataLog.NUM_COLUMN_ALTITUDE) ;
                    direction = curseur.getString(DataLog.NUM_COLUMN_DIRECTION) ;
                    satview = curseur.getInt(DataLog.NUM_COLUMN_SAT) ;
                    date = curseur.getString(DataLog.NUM_COLUMN_DATE) ;
                    send    = curseur.getInt(DataLog.NUM_COLUMN_SEND) ;
 
                    curseur.close();
                    handler.close() ;
 
                    Log.v("GPOS     ", "ID  " + id);
                    Log.v("GPOS     ", "latitude  " +  latitude);    
                    Log.v("GPOS     ", "longitude " +  longitude);
                    Log.v("GPOS     ", "vitesse  "  +  vitesse);
                    Log.v("GPOS     ", "altitude  " +  altitude);
                    Log.v("GPOS     ", "direction  " + direction);
                    Log.v("GPOS     ", "Satellites " + satview);
                    Log.v("GPOS     ", "date  " + date);
                    Log.v("GPOS     ", "SEND   " + send);
 
                    objs = new LinkedList<Object>() ;
                    objs.add(infos.getDeviceID(context)) ;    
                    objs.add(Events.POSITION) ;    
                    objs.add(msgId++) ;    
                    objs.add(date) ;
                    objs.add(date) ;
                    objs.add(latitude) ;
                    objs.add(longitude) ;
                    objs.add(vitesse) ;
                    objs.add(altitude) ;
                    objs.add(direction) ;
                    objs.add(0) ;
                    objs.add(satview) ;
                    objs.add(Helper.battery) ;
                    objs.add(Helper.mplugged) ;
 
                    String sendPosition = Tools.getMessage(objs);
 
                    pos    = socketHandler.send(sendPosition) ;    
                    Log.v("INSERTCommands     ", "GPOS  " + pos);
                    Log.v("GPOS     ", "SEND POSITION  " + sendPosition);
                }
 
                if(pos == true){
 
                    Coordonnees cord = new Coordonnees(id, latitude, longitude, altitude, vitesse, direction, date, satview, 1) ;    
                    handler.removeCommands(idCmd) ;
                    handler.UpdateCoordonnees(id, cord) ; 
                    Log.v("GPOS     ", "SEND GPOS  " + cord);
                }
                break ;
}
cursor.close() ;
Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?

Merci d'avance pour votre aide.