Bonjour,
J'essaie de sélectionner les données d'une table pour les envoyer à un serveur mais je bute sur l'erreur suivante :
voici mon code :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)Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?
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() ;
Merci d'avance pour votre aide.
Partager