Bonjour à tous,
Je suis en train d'essayer d'enregistrer les positions lors d'un déplacement avec google maps.
Sauf que j'ai un problème avec sqlite qui me met une erreur et j'ai beau chercher je trouve pas la solution.
Pouvez vous m'aider ?
Les erreurs :
Le code concerné :Code:
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 11-25 18:31:41.850: D/dalvikvm(716): GC_FOR_MALLOC freed 4995 objects / 308328 bytes in 206ms 11-25 18:31:42.259: D/dalvikvm(716): GC_FOR_MALLOC freed 10114 objects / 614856 bytes in 105ms 11-25 18:31:42.609: D/dalvikvm(716): GC_FOR_MALLOC freed 4772 objects / 313216 bytes in 107ms 11-25 18:31:42.999: D/dalvikvm(716): GC_FOR_MALLOC freed 6181 objects / 377648 bytes in 115ms 11-25 18:31:43.429: D/dalvikvm(716): GC_FOR_MALLOC freed 8537 objects / 651080 bytes in 117ms 11-25 18:31:43.799: D/dalvikvm(716): GC_FOR_MALLOC freed 6091 objects / 370136 bytes in 102ms 11-25 18:31:44.139: I/Maps.MyLocationOverlay(716): Request updates from gps 11-25 18:31:44.389: I/MapActivity(716): Handling network change notification:CONNECTED 11-25 18:31:44.389: E/MapActivity(716): Couldn't get connection factory client 11-25 18:31:44.679: D/dalvikvm(716): GC_EXTERNAL_ALLOC freed 3645 objects / 319584 bytes in 116ms 11-25 18:31:44.709: E/Cursor(716): Finalizing a Cursor that has not been deactivated or closed. database = /data/data/com.android.map/databases/followmi.db, table = Positions, query = SELECT techKey, createDate, longitude, latitude, altitude, speed FROM Positions ORDER BY createDate 11-25 18:31:44.709: E/Cursor(716): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 11-25 18:31:44.709: E/Cursor(716): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210) 11-25 18:31:44.709: E/Cursor(716): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53) 11-25 18:31:44.709: E/Cursor(716): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345) 11-25 18:31:44.709: E/Cursor(716): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229) 11-25 18:31:44.709: E/Cursor(716): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184) 11-25 18:31:44.709: E/Cursor(716): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1301) 11-25 18:31:44.709: E/Cursor(716): at com.android.map.database.DataBase.getPositions(DataBase.java:103) 11-25 18:31:44.709: E/Cursor(716): at com.android.map.HelloGoogleMapActivity.onCreate(HelloGoogleMapActivity.java:84) 11-25 18:31:44.709: E/Cursor(716): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 11-25 18:31:44.709: E/Cursor(716): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 11-25 18:31:44.709: E/Cursor(716): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 11-25 18:31:44.709: E/Cursor(716): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 11-25 18:31:44.709: E/Cursor(716): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 11-25 18:31:44.709: E/Cursor(716): at android.os.Handler.dispatchMessage(Handler.java:99) 11-25 18:31:44.709: E/Cursor(716): at android.os.Looper.loop(Looper.java:123) 11-25 18:31:44.709: E/Cursor(716): at android.app.ActivityThread.main(ActivityThread.java:4627) 11-25 18:31:44.709: E/Cursor(716): at java.lang.reflect.Method.invokeNative(Native Method) 11-25 18:31:44.709: E/Cursor(716): at java.lang.reflect.Method.invoke(Method.java:521) 11-25 18:31:44.709: E/Cursor(716): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 11-25 18:31:44.709: E/Cursor(716): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 11-25 18:31:44.709: E/Cursor(716): at dalvik.system.NativeStart.main(Native Method) 11-25 18:31:44.989: D/dalvikvm(716): GC_FOR_MALLOC freed 809 objects / 255640 bytes in 109ms 11-25 18:31:45.219: D/dalvikvm(716): GC_FOR_MALLOC freed 3597 objects / 305648 bytes in 97ms 11-25 18:31:45.338: D/dalvikvm(716): GC_EXTERNAL_ALLOC freed 46 objects / 25408 bytes in 99ms 11-25 18:33:03.591: I/Maps.MyLocationOverlay(716): Running deferred on first fix: com.android.map.HelloGoogleMapActivity$1@44fd5de0 11-25 18:33:05.469: D/dalvikvm(716): GC_EXTERNAL_ALLOC freed 1896 objects / 235344 bytes in 118ms 11-25 18:33:06.189: D/dalvikvm(716): GC_EXPLICIT freed 2742 objects / 171200 bytes in 95ms 11-25 18:33:08.559: D/dalvikvm(716): GC_EXPLICIT freed 446 objects / 88144 bytes in 112ms 11-25 18:33:10.829: D/dalvikvm(716): GC_EXPLICIT freed 154 objects / 45064 bytes in 95ms 11-25 18:33:13.289: D/dalvikvm(716): GC_EXPLICIT freed 147 objects / 43392 bytes in 110ms 11-25 18:33:38.919: D/AndroidRuntime(716): Shutting down VM 11-25 18:33:38.932: W/dalvikvm(716): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 11-25 18:33:38.959: E/AndroidRuntime(716): FATAL EXCEPTION: main 11-25 18:33:38.959: E/AndroidRuntime(716): java.lang.NullPointerException 11-25 18:33:38.959: E/AndroidRuntime(716): at com.google.android.maps.ItemizedOverlay.getItemsAtLocation(ItemizedOverlay.java:617) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.google.android.maps.ItemizedOverlay.getItemAtLocation(ItemizedOverlay.java:586) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.google.android.maps.ItemizedOverlay.handleMotionEvent(ItemizedOverlay.java:498) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.google.android.maps.ItemizedOverlay.onTouchEvent(ItemizedOverlay.java:572) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.google.android.maps.OverlayBundle.onTouchEvent(OverlayBundle.java:63) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.google.android.maps.MapView.onTouchEvent(MapView.java:643) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.view.View.dispatchTouchEvent(View.java:3766) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.app.Activity.dispatchTouchEvent(Activity.java:2086) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.view.ViewRoot.handleMessage(ViewRoot.java:1785) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.os.Handler.dispatchMessage(Handler.java:99) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.os.Looper.loop(Looper.java:123) 11-25 18:33:38.959: E/AndroidRuntime(716): at android.app.ActivityThread.main(ActivityThread.java:4627) 11-25 18:33:38.959: E/AndroidRuntime(716): at java.lang.reflect.Method.invokeNative(Native Method) 11-25 18:33:38.959: E/AndroidRuntime(716): at java.lang.reflect.Method.invoke(Method.java:521) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 11-25 18:33:38.959: E/AndroidRuntime(716): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 11-25 18:33:38.959: E/AndroidRuntime(716): at dalvik.system.NativeStart.main(Native Method) 11-25 18:33:43.071: I/Process(716): Sending signal. PID: 716 SIG: 9
Code:
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 package com.android.map.database; import java.util.ArrayList; import java.util.Calendar; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import com.android.map.pojos.PositionMarker; public class DataBase extends SQLiteOpenHelper{ /** Nom du fichier de la DB **/ private static String DATABASE_NAME = "followmi.db"; /** Version de la DB, utilisé pour les mises à jour **/ private static final int DATABASE_VERSION = 1; /** Référence vers la connection DB **/ private SQLiteDatabase db; /** Nom de la table centralisant les Positions enregistrées **/ private static String COLUMN_TECHKEY = "techKey"; private static String COLUMN_CREATIONDATE = "createDate"; private static String TABLE_POSITIONS = "Positions"; private static String COLUMN_LONGITUDE = "longitude"; private static String COLUMN_LATITUDE = "latitude"; private static String COLUMN_ALTITUDE = "altitude"; private static String COLUMN_SPEED = "speed"; private static String CREATE_TABLE_POSITIONS = "create table " + TABLE_POSITIONS + " ( " + COLUMN_TECHKEY + " integer PRIMARY KEY AUTOINCREMENT," + COLUMN_CREATIONDATE + " TIMESTAMP," + COLUMN_LONGITUDE + " FLOAT," + COLUMN_LATITUDE + " FLOAT," + COLUMN_ALTITUDE + " FLOAT," + COLUMN_SPEED + " FLOAT" + ");"; public DataBase(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); db = getWritableDatabase(); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub //on créé la table à partir de la requête écrite dans la variable CREATE_TABLE_POSITIONS db.execSQL(CREATE_TABLE_POSITIONS); } /** * Exécuté lorsque le numéro de version change (DATABASE_VERSION). * Supprime l'ancienne table Positions et la remplace par la nouvelle. */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS " + TABLE_POSITIONS); onCreate(db); } public DataBase(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); db = getWritableDatabase(); } public long insertPosition(PositionMarker positionMarker) { if (null != positionMarker) { ContentValues positionToInsert = new ContentValues(); positionToInsert.put(COLUMN_CREATIONDATE, positionMarker.getCreationDate().getTimeInMillis()); positionToInsert.put(COLUMN_LONGITUDE, positionMarker.getLongitude()); positionToInsert.put(COLUMN_LATITUDE, positionMarker.getLatitude()); positionToInsert.put(COLUMN_ALTITUDE, positionMarker.getAltitude()); positionToInsert.put(COLUMN_SPEED, positionMarker.getSpeed()); long output = db.insert(TABLE_POSITIONS, null, positionToInsert); db.close(); return output; } else { return 0; } // end-if } /** * Récupère l'ensemble des positions disponibles en DB. */ public ArrayList<PositionMarker> getPositions() { ArrayList<PositionMarker> output = new ArrayList<PositionMarker>(); String[] colonnesARecup = new String[] { COLUMN_TECHKEY, COLUMN_CREATIONDATE, COLUMN_LONGITUDE, COLUMN_LATITUDE, COLUMN_ALTITUDE, COLUMN_SPEED }; Cursor cursorResults = db.query(TABLE_POSITIONS, colonnesARecup, null, null, null, null, COLUMN_CREATIONDATE + " asc", null); if (null != cursorResults) { if (cursorResults.moveToFirst()) { do { long techKey = cursorResults.getLong(cursorResults.getColumnIndex(COLUMN_TECHKEY)); Calendar creationDate = Calendar.getInstance(); creationDate.setTimeInMillis(cursorResults.getLong(cursorResults.getColumnIndex(COLUMN_CREATIONDATE))); double longitude = cursorResults.getDouble(cursorResults.getColumnIndex(COLUMN_LONGITUDE)); double altitude = cursorResults.getDouble(cursorResults.getColumnIndex(COLUMN_ALTITUDE)); float speed = cursorResults.getFloat(cursorResults.getColumnIndex(COLUMN_SPEED)); double latitude = cursorResults.getDouble(cursorResults.getColumnIndex(COLUMN_LATITUDE)); PositionMarker positionToAdd = new PositionMarker(techKey,creationDate,longitude,latitude,altitude,speed); output.add(positionToAdd); } while (cursorResults.moveToNext()); } // end-if } // end-if db.close(); return output; } }