· 6 years ago · Aug 19, 2019, 08:36 PM
110-18 08:40:56.354: E/Cursor(331): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
210-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteCursor.<init>(SQLiteCursor.java:210)
310-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53)
410-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
510-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229)
610-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184)
710-18 08:40:56.354: E/Cursor(331): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264)
810-18 08:40:56.354: E/Cursor(331): at standard.internet.marketing.mymovingfriend.SQLHandler.checkMove(SQLHandler.java:1094)
910-18 08:40:56.354: E/Cursor(331): at standard.internet.marketing.mymovingfriend.ListMovingNames$3.onKey(ListMovingNames.java:98)
1010-18 08:40:56.354: E/Cursor(331): at android.view.View.dispatchKeyEvent(View.java:3735)
1110-18 08:40:56.354: E/Cursor(331): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
1210-18 08:40:56.354: E/Cursor(331): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
1310-18 08:40:56.354: E/Cursor(331): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
1410-18 08:40:56.354: E/Cursor(331): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:788)
1510-18 08:40:56.354: E/Cursor(331): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1667)
1610-18 08:40:56.354: E/Cursor(331): at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1102)
1710-18 08:40:56.354: E/Cursor(331): at android.app.Activity.dispatchKeyEvent(Activity.java:2063)
1810-18 08:40:56.354: E/Cursor(331): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1643)
1910-18 08:40:56.354: E/Cursor(331): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
2010-18 08:40:56.354: E/Cursor(331): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2441)
2110-18 08:40:56.354: E/Cursor(331): at android.view.ViewRoot.handleMessage(ViewRoot.java:1735)
2210-18 08:40:56.354: E/Cursor(331): at android.os.Handler.dispatchMessage(Handler.java:99)
2310-18 08:40:56.354: E/Cursor(331): at android.os.Looper.loop(Looper.java:123)
2410-18 08:40:56.354: E/Cursor(331): at android.app.ActivityThread.main(ActivityThread.java:4627)
2510-18 08:40:56.354: E/Cursor(331): at java.lang.reflect.Method.invokeNative(Native Method)
2610-18 08:40:56.354: E/Cursor(331): at java.lang.reflect.Method.invoke(Method.java:521)
2710-18 08:40:56.354: E/Cursor(331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
2810-18 08:40:56.354: E/Cursor(331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
2910-18 08:40:56.354: E/Cursor(331): at dalvik.system.NativeStart.main(Native Method)
30
31public class SQLHandler {
32
33 public static final String KEY_MOVENAME = "movename";
34 public static final String KEY_ID1 = "_id";
35 public static final String KEY_ID5 = "_id";
36 public static final String KEY_MOVEDATE = "movedate";
37 public static final String KEY_TOTALMOVEWEIGHT = "totalmoveweight";
38 public static final String KEY_TOTALITEM = "totalitem";
39
40 private static final String DATABASE_NAME = "mymovingfriend";
41 private static final int DATABASE_VERSION = 1;
42
43 public static final String KEY_LISTITEMNAME = "listitemname";
44 public static final String KEY_LISTITEMWEIGHT = "listitemweight";
45 public static final String KEY_LISTITEMROOM = "listitemroom";
46
47 private static final String DATABASE_TABLE1 = "movingname";
48 private static final String DATABASE_TABLE5 = "listitem";
49
50 public static final String CREATE_TABLE_1 = "CREATE TABLE " + DATABASE_TABLE1 + " (" +
51 KEY_ID1 + " INTEGER PRIMARY KEY AUTOINCREMENT," +
52 KEY_MOVEDATE + " TEXT NOT NULL, " +
53 KEY_TOTALMOVEWEIGHT + " TEXT NOT NULL, " +
54 KEY_TOTALITEM + " INTEGER NOT NULL, " +
55 KEY_MOVENAME + " TEXT NOT NULL);";
56
57 public static final String CREATE_TABLE_2 = "CREATE TABLE " + DATABASE_TABLE2 + " (" +
58 KEY_ID2 + " INTEGER PRIMARY KEY AUTOINCREMENT," +
59 KEY_ROOMMOVEHOLDER + " TEXT NOT NULL, " +
60 KEY_ROOMWEIGHT + " TEXT NOT NULL, " +
61 KEY_ROOM + " TEXT NOT NULL);";
62
63 public static final String CREATE_TABLE_5 = "CREATE TABLE " + DATABASE_TABLE5 + " (" +
64 KEY_ID5 + " INTEGER PRIMARY KEY AUTOINCREMENT," +
65 KEY_LISTITEMNAME + " TEXT NOT NULL, " +
66 KEY_LISTITEMWEIGHT + " TEXT NOT NULL, " +
67 KEY_LISTITEMROOM + " TEXT NOT NULL);";
68
69 private DbHelper ourHelper;
70 private final Context ourContext;
71 private SQLiteDatabase ourDatabase;
72
73 private static class DbHelper extends SQLiteOpenHelper{
74
75 public DbHelper(Context context) {
76 super(context, DATABASE_NAME, null, DATABASE_VERSION);
77 // TODO Auto-generated constructor stub
78 }
79
80 @Override
81 public void onCreate(SQLiteDatabase db) {
82 // TODO Auto-generated method stub
83 db.execSQL(CREATE_TABLE_1);
84 db.execSQL(CREATE_TABLE_2);
85 db.execSQL(CREATE_TABLE_3);
86 db.execSQL(CREATE_TABLE_4);
87 db.execSQL(CREATE_TABLE_5);
88 }
89
90 @Override
91 public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
92 // TODO Auto-generated method stub
93 db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE1);
94 db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE2);
95 db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE3);
96 db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE4);
97 db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE5);
98 onCreate(db);
99 }
100 }
101
102 public SQLHandler(Context c){
103 ourContext = c;
104 }
105
106 public SQLHandler open() throws SQLException{
107 ourHelper = new DbHelper(ourContext);
108 ourDatabase = ourHelper.getWritableDatabase();
109 return this;
110 }
111
112 public void close(){
113 ourDatabase.close();
114 ourHelper.close();
115 }
116
117 public long createMove(String smovename){
118 ContentValues cv = new ContentValues();
119 cv.put(KEY_MOVENAME, smovename);
120 cv.put(KEY_MOVEDATE, "Not yet set");
121 cv.put(KEY_TOTALMOVEWEIGHT, "0");
122 cv.put(KEY_TOTALITEM, 0);
123 return ourDatabase.insert(DATABASE_TABLE1, null, cv);
124 }
125
126 public void createList(){
127
128 String[] sroom = new String[]{"Kitchen", "Bedroom", "Dinning Room"};
129 String[] sitem = new String[]{"Dishwasher", "Bed", "Table"};
130 String[] sweight = new String[]{"40", "25", "15"};
131
132 for (int i = 0; i < sroom.length; i++) {
133 cv.put(KEY_LISTITEMROOM, sroom[i]);
134 cv.put(KEY_LISTITEMNAME, sitem[i]);
135 cv.put(KEY_LISTITEMWEIGHT, sweight[i]);
136 ourDatabase.insert(DATABASE_TABLE5, null, cv);
137 }
138 }
139
140 public void setMoveDate(String smovedate, String smovename){
141 ContentValues cv = new ContentValues();
142 cv.put(KEY_MOVEDATE, smovedate);
143 ourDatabase.update(DATABASE_TABLE1, cv, KEY_MOVENAME + "='" + smovename + "'", null);
144 }
145
146 public void setMoveWeight(String smoveweight, String smovename){
147 ContentValues cv = new ContentValues();
148 cv.put(KEY_TOTALMOVEWEIGHT, smoveweight);
149 ourDatabase.update(DATABASE_TABLE1, cv, KEY_MOVENAME + "='" + smovename + "'", null);
150 }
151
152 public void setTotalItem(String smovename, int imoveitem){
153 ContentValues cv = new ContentValues();
154 cv.put(KEY_TOTALITEM, imoveitem);
155 ourDatabase.update(DATABASE_TABLE1, cv, KEY_MOVENAME + "='" + smovename + "'", null);
156 }
157
158 public void renameRoom(String movename, String roomname, String currentroom){
159 ContentValues cv = new ContentValues();
160 cv.put(KEY_ROOM, roomname);
161 ourDatabase.update(DATABASE_TABLE2, cv, KEY_ROOMMOVEHOLDER + "='" + movename + "'" + " AND " + KEY_ROOM + "='" + currentroom + "'", null);
162 }
163
164 public void setRoomWeight(String sroomweight, String smovename, String sroomname){
165 ContentValues cv = new ContentValues();
166 cv.put(KEY_ROOMWEIGHT, sroomweight);
167 ourDatabase.update(DATABASE_TABLE2, cv, KEY_ROOMMOVEHOLDER + "='" + smovename + "'" + " AND " + KEY_ROOM + "='" + sroomname + "'", null);
168 }
169
170 public long addRooms(String sroommoveholder, String sroom){
171 ContentValues cv = new ContentValues();
172 cv.put(KEY_ROOMMOVEHOLDER, sroommoveholder);
173 cv.put(KEY_ROOM, sroom);
174 cv.put(KEY_ROOMWEIGHT, "0");
175 return ourDatabase.insert(DATABASE_TABLE2, null, cv);
176 }
177
178 public long addNewItems(String sitemmoveholder, String sroomholder, String sitemname, String sitemvalue, String sitemweight){
179 ContentValues cv = new ContentValues();
180 cv.put(KEY_ITEMMOVEHOLDER, sitemmoveholder);
181 cv.put(KEY_ROOMHOLDER, sroomholder);
182 cv.put(KEY_ITEMNAME, sitemname);
183 cv.put(KEY_ITEMVALUE, sitemvalue);
184 cv.put(KEY_ITEMWEIGHT, sitemweight);
185 return ourDatabase.insert(DATABASE_TABLE3, null, cv);
186 }
187
188 public void updateItems(String sitemmoveholder, String sroomholder, String sitemname, String sitemvalue, String sitemweight){
189 ContentValues cv = new ContentValues();
190 cv.put(KEY_ITEMVALUE, sitemvalue);
191 cv.put(KEY_ITEMWEIGHT, sitemweight);
192 ourDatabase.update(DATABASE_TABLE3, cv, KEY_ITEMMOVEHOLDER + "='" + sitemmoveholder + "'" + " AND " +
193 KEY_ROOMHOLDER + "='" + sroomholder + "'" + " AND " + KEY_ITEMNAME + "='" + sitemname + "'", null);
194 }
195
196 public Cursor getMove(){
197 String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};
198
199 Cursor c = null;
200 try {
201 c = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
202 } catch (Exception e) {
203 c.close();
204 }
205 return c;
206 }
207
208 public String getTotalWeight(String m) throws SQLException{
209 String[] columns = new String[]{KEY_ID1, KEY_MOVENAME, KEY_MOVEDATE, KEY_TOTALMOVEWEIGHT};
210
211 Cursor c = null;
212 try {
213 c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_MOVENAME + "= '" + m + "'", null, null, null, null);
214 if (c != null) {
215 c.moveToFirst();
216 String totalWeight = c.getString(3);
217 return totalWeight;
218 }
219 } catch (Exception e) {
220 c.close();
221 }
222 return null;
223
224 }
225
226 public String getTotalWeightLBS(String m) throws SQLException{
227 String[] columns = new String[]{KEY_ID1, KEY_MOVENAME, KEY_MOVEDATE, KEY_TOTALMOVEWEIGHT};
228
229 Cursor c = null;
230 try {
231 c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_MOVENAME + "= '" + m + "'", null, null, null, null);
232 if (c != null) {
233 c.moveToFirst();
234 int x = Integer.parseInt(c.getString(3)) * 7;
235 String totalWeight = "" + x + " lbs";
236 return totalWeight;
237 }
238 } catch (Exception e) {
239 c.close();
240 }
241 return null;
242
243 }
244
245 public String getDateMove(String md){
246 String[] columns = new String[]{KEY_ID1, KEY_MOVENAME, KEY_MOVEDATE};
247
248 Cursor c = null;try {
249 c = ourDatabase.query(DATABASE_TABLE1, columns, KEY_MOVENAME + "= '" + md + "'", null, null, null, null);
250
251 if (c != null) {
252 c.moveToFirst();
253 String moveDate = c.getString(2);
254 return moveDate;
255 }
256 } catch (Exception e) {
257 c.close();
258 }
259 return null;
260 }
261
262 public ArrayList<String> loadRooms(String mn) throws SQLException{
263 String[] columns = new String[]{KEY_ID2, KEY_ROOMMOVEHOLDER, KEY_ROOM};
264
265 ArrayList<String> array = new ArrayList<String>();
266
267 Cursor c = null;
268 try {
269 c = ourDatabase.query(DATABASE_TABLE2, columns,KEY_ROOMMOVEHOLDER + "='" + mn + "'",
270 null, null, null, null);
271 int iroom = c.getColumnIndex(KEY_ROOM);
272
273 for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
274 array.add(c.getString(iroom));
275 }
276 } catch (Exception e) {
277 c.close();
278 }
279 return array;
280 }
281
282 public void deleteMove(String m) throws SQLException{
283 ourDatabase.delete(DATABASE_TABLE1, KEY_MOVENAME + "='" + m + "'", null);
284 ourDatabase.delete(DATABASE_TABLE2, KEY_ROOMMOVEHOLDER + "='" + m + "'", null);
285 ourDatabase.delete(DATABASE_TABLE3, KEY_ITEMMOVEHOLDER + "='" + m + "'", null);
286 ourDatabase.delete(DATABASE_TABLE4, KEY_TODOMOVE + "='" + m + "'", null);
287 }
288
289 public ArrayList<String> getitems(){
290 String[] columns = new String[]{KEY_ID5, KEY_ITEMNAME};
291 ArrayList<String> items;
292 items = new ArrayList<String>();
293
294 Cursor c = null;
295 try {
296 c = ourDatabase.query(DATABASE_TABLE5, columns, null, null, null, null, null);
297
298 for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
299 items.add(c.getString(1));
300 }
301 } catch (Exception e) {
302 c.close();
303 }
304
305 return items;
306 }
307
308 public ArrayList<String> getitemweight(){
309 String[] columns = new String[]{KEY_ID5, KEY_ITEMWEIGHT};
310 ArrayList<String> items = new ArrayList<String>();
311
312 Cursor c = null;
313 try {
314 c = ourDatabase.query(DATABASE_TABLE5, columns, null, null, null, null, null);
315 for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
316 items.add(c.getString(1));
317 }
318 } catch (Exception e) {
319 c.close();
320 }
321
322 return items;
323 }
324
325 public ArrayList<String> getitemclass(){
326 String[] columns = new String[]{KEY_ID5, KEY_LISTITEMROOM};
327 ArrayList<String> items = new ArrayList<String>();
328
329 Cursor c = null;
330 try {
331 c = ourDatabase.query(DATABASE_TABLE5, columns, null, null, null, null, null);
332
333 for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
334 items.add(c.getString(1));
335 }
336 } catch (Exception e) {
337 c.close();
338 }
339
340 return items;
341 }
342
343}
344
345try{
346 // get data from cursor
347} catch (Exception e) {
348 c.close();
349}
350
351try {
352 // get data from cursor
353} catch (Exception e) {
354 // exception handling
355} finally {
356 if(c != null){
357 c.close();
358 }
359}
360
361public void myfunc() {
362
363 Cursor c = null;
364
365 try {
366
367 c = ... // Open cursor here
368 return .... // maybe return something
369
370 } finally {
371 if(c != null) { c.close(); }
372 }
373}
374
375Cursor cursor = db.query("tableName", columns, null, null, null, null, null);
376try {
377 if (cursor.moveToFirst()) return cursor.getString(3);
378 else return null;
379} finally {
380 cursor.close();
381}
382
383try (Cursor cursor = db.query("tableName", columns, null, null, null, null, null)) {
384 if (cursor.moveToFirst()) return cursor.getString(3);
385 else return null;
386}
387
388catch (Exception e) {
389 c.close();
390 }
391
392finally {
393 c.close();
394 }
395
396@Override
397public void onStop(){
398 Cursor cursor;
399
400 if(cursor!=null){
401 cursor.close();}
402 }
403
404DatabaseObject db;
405if(db!=null)
406{ db.close();}
407
408cursor?.use {
409 //..do stuff
410 }