aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-01-05 14:41:51 +0100
committerSamuel Tardieu <sam@rfc1149.net>2014-01-05 14:42:35 +0100
commita69a89f0f1e8faf2ade4b86ceb0c86a11727c8d5 (patch)
treedf894a84f2386b276e07682473c7800dd36a9ee3
parent0aa9a96a54922cb6320c28169c27467f143c5a91 (diff)
downloadcgeo-a69a89f0f1e8faf2ade4b86ceb0c86a11727c8d5.zip
cgeo-a69a89f0f1e8faf2ade4b86ceb0c86a11727c8d5.tar.gz
cgeo-a69a89f0f1e8faf2ade4b86ceb0c86a11727c8d5.tar.bz2
fix #2467: recreate database if it cannot be opened
-rw-r--r--main/src/cgeo/geocaching/DataStore.java15
1 files changed, 14 insertions, 1 deletions
diff --git a/main/src/cgeo/geocaching/DataStore.java b/main/src/cgeo/geocaching/DataStore.java
index 4543451..11efbd2 100644
--- a/main/src/cgeo/geocaching/DataStore.java
+++ b/main/src/cgeo/geocaching/DataStore.java
@@ -296,11 +296,24 @@ public class DataStore {
return;
}
+ final DbHelper dbHelper = new DbHelper(new DBContext(CgeoApplication.getInstance()));
try {
- final DbHelper dbHelper = new DbHelper(new DBContext(CgeoApplication.getInstance()));
database = dbHelper.getWritableDatabase();
} catch (Exception e) {
Log.e("DataStore.init: unable to open database for R/W", e);
+ // Attempt to recreate the database if opening has failed
+ final File path = databasePath();
+ final File corruptedPath = new File(path + ".corrupted");
+ if (path.renameTo(corruptedPath)) {
+ Log.i("DataStore.init: renamed " + path + " into " + corruptedPath);
+ try {
+ database = dbHelper.getWritableDatabase();
+ } catch (Exception f) {
+ Log.e("DataStore.init: unable to recreate database and open it for R/W", f);
+ }
+ } else {
+ Log.e("DataStore.init: unable to rename corrupted database");
+ }
}
}