Bonjour,
Mon application lance une base de donnée qui a pour fonctionnement un qcm.
J'ai récupérer le fonctionnement sur un tuto et il fonctionnait bien, mais depuis quelques jours, j'ai ces erreurs dans les logs et je comprends pas la raison. Pouvez-vous m'aider ?
Et le java de ma base de donnée :
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 01-13 22:10:16.686: E/Database(11807): Leak found 01-13 22:10:16.686: E/Database(11807): java.lang.IllegalStateException: mPrograms size 1 01-13 22:10:16.686: E/Database(11807): at android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:1695) 01-13 22:10:16.686: E/Database(11807): at dalvik.system.NativeStart.run(Native Method) 01-13 22:10:16.686: E/Database(11807): Caused by: java.lang.IllegalStateException: /data/data/com.tmm.android.nomdemonapplication/databases/questionsDb SQLiteDatabase created and never closed 01-13 22:10:16.686: E/Database(11807): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1721) 01-13 22:10:16.686: E/Database(11807): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:763) 01-13 22:10:16.686: E/Database(11807): at com.tmm.android.candide.db.DBHelper.openDataBase(DBHelper.java:114) 01-13 22:10:16.686: E/Database(11807): at com.tmm.android.candide.SplashActivity.getQuestionSetFromDb(SplashActivity.java:119) 01-13 22:10:16.686: E/Database(11807): at com.tmm.android.candide.SplashActivity.onClick(SplashActivity.java:70) 01-13 22:10:16.686: E/Database(11807): at android.view.View.performClick(View.java:2405) 01-13 22:10:16.686: E/Database(11807): at android.view.View.onTouchEvent(View.java:4270) 01-13 22:10:16.686: E/Database(11807): at android.widget.TextView.onTouchEvent(TextView.java:6784) 01-13 22:10:16.686: E/Database(11807): at android.view.View.dispatchTouchEvent(View.java:3796) 01-13 22:10:16.686: E/Database(11807): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:888) 01-13 22:10:16.686: E/Database(11807): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:888) 01-13 22:10:16.686: E/Database(11807): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:888) 01-13 22:10:16.686: E/Database(11807): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:888) 01-13 22:10:16.686: E/Database(11807): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:888) 01-13 22:10:16.686: E/Database(11807): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1673) 01-13 22:10:16.686: E/Database(11807): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1114) 01-13 22:10:16.686: E/Database(11807): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 01-13 22:10:16.686: E/Database(11807): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1657) 01-13 22:10:16.686: E/Database(11807): at android.view.ViewRoot.handleMessage(ViewRoot.java:1758) 01-13 22:10:16.686: E/Database(11807): at android.os.Handler.dispatchMessage(Handler.java:99) 01-13 22:10:16.686: E/Database(11807): at android.os.Looper.loop(Looper.java:136) 01-13 22:10:16.686: E/Database(11807): at android.app.ActivityThread.main(ActivityThread.java:4425) 01-13 22:10:16.686: E/Database(11807): at java.lang.reflect.Method.invokeNative(Native Method) 01-13 22:10:16.686: E/Database(11807): at java.lang.reflect.Method.invoke(Method.java:521) 01-13 22:10:16.686: E/Database(11807): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:850) 01-13 22:10:16.686: E/Database(11807): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 01-13 22:10:16.686: E/Database(11807): at dalvik.system.NativeStart.main(Native Method)
Merci
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 public class DBHelper extends SQLiteOpenHelper{ private static String DB_PATH = "/data/data/com.tmm.android.(nomdemonapplication)/databases/"; private static String DB_NAME = "questionsDb"; private SQLiteDatabase myDataBase; private final Context myContext; public DBHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; } public void createDataBase() throws IOException{ boolean dbExist = checkDataBase(); if(!dbExist) { this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } private boolean checkDataBase(){ SQLiteDatabase checkDB = null; try{ String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); }catch(SQLiteException e){ //database does't exist yet. } if(checkDB != null){ checkDB.close(); } return checkDB != null ? true : false; } private void copyDataBase() throws IOException{ InputStream myInput = myContext.getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException{ //Open the database String myPath = DB_PATH + DB_NAME; myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
Partager