17
17
18
18
import android .database .Cursor ;
19
19
import android .database .sqlite .SQLiteDatabase ;
20
+ import android .database .sqlite .SQLiteException ;
20
21
import android .database .sqlite .SQLiteOpenHelper ;
21
22
import android .util .Log ;
22
23
@@ -38,6 +39,44 @@ public class DatabaseCache {
38
39
@ Inject
39
40
private Provider <CacheHelper > helperProvider ;
40
41
42
+ /**
43
+ * Get writable database
44
+ *
45
+ * @param helper
46
+ * @return writable database or null if it failed to create/open
47
+ */
48
+ protected SQLiteDatabase getWritable (SQLiteOpenHelper helper ) {
49
+ try {
50
+ return helper .getWritableDatabase ();
51
+ } catch (SQLiteException e1 ) {
52
+ // Make second attempt
53
+ try {
54
+ return helper .getWritableDatabase ();
55
+ } catch (SQLiteException e2 ) {
56
+ return null ;
57
+ }
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Get readable database
63
+ *
64
+ * @param helper
65
+ * @return readable database or null if it failed to create/open
66
+ */
67
+ protected SQLiteDatabase getReadable (SQLiteOpenHelper helper ) {
68
+ try {
69
+ return helper .getReadableDatabase ();
70
+ } catch (SQLiteException e1 ) {
71
+ // Make second attempt
72
+ try {
73
+ return helper .getReadableDatabase ();
74
+ } catch (SQLiteException e2 ) {
75
+ return null ;
76
+ }
77
+ }
78
+ }
79
+
41
80
/**
42
81
* Load or request given resources
43
82
*
@@ -78,11 +117,15 @@ public <E> List<E> requestAndStore(
78
117
}
79
118
}
80
119
81
- private <E > List <E > requestAndStore (SQLiteOpenHelper helper ,
82
- PersistableResource <E > persistableResource ) throws IOException {
83
- List <E > items = persistableResource .request ();
120
+ private <E > List <E > requestAndStore (final SQLiteOpenHelper helper ,
121
+ final PersistableResource <E > persistableResource )
122
+ throws IOException {
123
+ final List <E > items = persistableResource .request ();
124
+
125
+ final SQLiteDatabase db = getWritable (helper );
126
+ if (db == null )
127
+ return items ;
84
128
85
- SQLiteDatabase db = helper .getWritableDatabase ();
86
129
try {
87
130
db .beginTransaction ();
88
131
try {
@@ -97,9 +140,12 @@ private <E> List<E> requestAndStore(SQLiteOpenHelper helper,
97
140
return items ;
98
141
}
99
142
100
- private <E > List <E > loadFromDB (SQLiteOpenHelper helper ,
101
- PersistableResource <E > persistableResource ) {
102
- SQLiteDatabase db = helper .getReadableDatabase ();
143
+ private <E > List <E > loadFromDB (final SQLiteOpenHelper helper ,
144
+ final PersistableResource <E > persistableResource ) {
145
+ final SQLiteDatabase db = getReadable (helper );
146
+ if (db == null )
147
+ return null ;
148
+
103
149
try {
104
150
Cursor cursor = persistableResource .getCursor (db );
105
151
try {
0 commit comments