Bonjour à tous. Pour un projet perso en Android démarré pendant cette période de confinement, je cherche à ouvrir un Agenda depuis une Activité à partir sur un bouton.
Dans la fonction qui pose le calendrier, je récupère également des évènements depuis une base de données SQLite et j'ouvre donc une base avec la fonction getReadableDatabase.
Tout semble fonctionner quand j'ouvre l'activité Calendrier directement en en faisant l'activité principale depuis mon Manifest et dans ce cas la base de données ne renvoie pas d'erreur.
Pourtant, quand je lance l'activité depuis une autre activité avec un Intent depuis mon écouteur de click, l'application crash et me renvoie comme message d'erreur que la base de données est "locked" :
J'ai essayé différentes méthodes telles que
Quand je lance l'activité
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14newRdv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(PatientFolderActivity.this, "PETER DIAMANDIS & RAY KURZWEIL", Toast.LENGTH_LONG).show(); Intent intent = new Intent(PatientFolderActivity.this, CustomCalendarActivity.class); startActivity(intent); } });
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class CustomCalendarActivity extends AppCompatActivity { private static final String TAG = CustomCalendarActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_calendar); CalendarCustomView mView = findViewById(R.id.custom_calendar); } }
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 private void setUpCalendarAdapter() { String currwntDate = formatter.format(cal.getTime()); currentDate.setText(currwntDate); dates.clear(); //List<Date> dayValueInCells = new ArrayList<Date>(); dbOpenHelper = new Database(context); //DatabaseQuery mQuery = new DatabaseQuery(context); //dbOpenHelper = Database.getInstance(context); List<EventObjects> mEvents = dbOpenHelper.getAllFutureEvents(); //int mEvents = CalendarCustomView.this.openDatabase().getAllFutureEvents(); Calendar mCal = (Calendar)cal.clone(); mCal.set(Calendar.DAY_OF_MONTH, 1); int FirstDayOfTheMonth = mCal.get(Calendar.DAY_OF_WEEK) - 1; mCal.add(Calendar.DAY_OF_MONTH, -FirstDayOfTheMonth); //CollectEventsPerMonth(monthFormat.format(cal.getTime()), yearFormate.format(cal.getTime())); while(dates.size() < MAX_CALENDAR_COLUMN) { dates.add(mCal.getTime()); mCal.add(Calendar.DAY_OF_MONTH, 1); } Log.d(TAG, "Number of date " + dates.size()); //String sDate = formatter.format(cal.getTime()); //currentDate.setText(sDate); mAdapter = new GridAdapter(context, dates, cal, mEvents); //mAdapter = new GridAdapter(context, dates, cal); calendarGridView.setAdapter(mAdapter); }Ayant trouvé sur Internet, que mon problème pourrait être en rapport avec le multithreading, j'ai tenté de transformer ma classe SQLiteOpenHelper en singleton :
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 public List<EventObjects> getAllFutureEvents() { Date dateToday = new Date(); List<EventObjects> events = new ArrayList<>(); String query = "select * from " + TABLE_EVENTS + ""; //String query1 = "SELECT * FROM " + TABLE_EVENTS; SQLiteDatabase db = getReadableDatabase(); Cursor cursor = db.rawQuery(query, null); if(cursor.moveToFirst()){ do{ int id = cursor.getInt(0); String event = cursor.getString(cursor.getColumnIndexOrThrow("event")); String date = cursor.getString(cursor.getColumnIndexOrThrow("date")); String time = cursor.getString(cursor.getColumnIndexOrThrow("time")); String month = cursor.getString(cursor.getColumnIndexOrThrow("month")); String year = cursor.getString(cursor.getColumnIndexOrThrow("year")); Date reminderDate = convertStringToDate(date); if(reminderDate.after(dateToday) || reminderDate.equals(dateToday)) { events.add(new EventObjects(id, event, date, time, month, year)); } } while (cursor.moveToNext()); } cursor.close(); db.close(); return events; }
Et d'ouvrir la connection ainsi depuis ma fonction setUpCalendarAdapter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13private static Database sInstance; public static synchronized Database getInstance(Context context) { if (sInstance == null) { sInstance = new Database(context.getApplicationContext()); } return sInstance; }
Pourtant, çà ne semble pas mieux fonctionner et je reçois encore cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 dbOpenHelper = Database.getInstance(context);
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
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154 E/SQLiteLog: (5) database is locked E/SQLiteDatabase: Failed to open database '/data/user/0/com.example.testcovid/databases/ wozniak '. android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890) at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:635) at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:321) at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:295) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:216) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:194) at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:493) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:200) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:192) at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:864) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:849) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:724) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:295) at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:262) at com.example.testcovid.Database.getAllFutureEvents(Database.java:434) at com.example.testcovid.CalendarCustomView.setUpCalendarAdapter(CalendarCustomView.java:375) at com.example.testcovid.CalendarCustomView.<init>(CalendarCustomView.java:82) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at android.view.LayoutInflater.createView(LayoutInflater.java:647) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at com.example.testcovid.CustomCalendarActivity.onCreate(CustomCalendarActivity.java:18) at android.app.Activity.performCreate(Activity.java:7009) at android.app.Activity.performCreate(Activity.java:7000) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) E/SQLiteOpenHelper: Couldn't open wozniak for writing (will try read-only): android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:890) at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:635) at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:321) at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:295) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:216) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:194) at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:493) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:200) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:192) at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:864) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:849) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:724) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:714) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:295) at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:262) at com.example.testcovid.Database.getAllFutureEvents(Database.java:434) at com.example.testcovid.CalendarCustomView.setUpCalendarAdapter(CalendarCustomView.java:375) at com.example.testcovid.CalendarCustomView.<init>(CalendarCustomView.java:82) at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at android.view.LayoutInflater.createView(LayoutInflater.java:647) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at com.example.testcovid.CustomCalendarActivity.onCreate(CustomCalendarActivity.java:18) at android.app.Activity.performCreate(Activity.java:7009) at android.app.Activity.performCreate(Activity.java:7000) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.testcovid, PID: 5405 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testcovid/com.example.testcovid.CustomCalendarActivity}: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class com.example.testcovid.CalendarCustomView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class com.example.testcovid.CalendarCustomView Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class com.example.testcovid.CalendarCustomView Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at android.view.LayoutInflater.createView(LayoutInflater.java:647) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) at com.example.testcovid.CustomCalendarActivity.onCreate(CustomCalendarActivity.java:18) at android.app.Activity.performCreate(Activity.java:7009) at android.app.Activity.performCreate(Activity.java:7000) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5) at android.database.sqlite.SQLiteConnection.nativeExecuteForLong(Native Method) at android.database.sqlite.SQLiteConnection.executeForLong(SQLiteConnection.java:599) at android.database.sqlite.SQLiteSession.executeForLong(SQLiteSession.java:652) at android.database.sqlite.SQLiteStatement.simpleQueryForLong(SQLiteStatement.java:107) at android.database.DatabaseUtils.longForQuery(DatabaseUtils.java:842) at android.database.DatabaseUtils.longForQuery(DatabaseUtils.java:830) at android.database.sqlite.SQLiteDatabase.getVersion(SQLiteDatabase.java:940) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:311) at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:262) E/AndroidRuntime: at com.example.testcovid.Database.getAllFutureEvents(Database.java:434) at com.example.testcovid.CalendarCustomView.setUpCalendarAdapter(CalendarCustomView.java:375) at com.example.testcovid.CalendarCustomView.<init>(CalendarCustomView.java:82) ... 26 more
Est-ce que quelqu'un aurait une idée de ce qui pourrait clocher ?







Répondre avec citation
Partager