diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2014-01-05 14:41:51 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2014-01-05 14:42:35 +0100 |
| commit | a69a89f0f1e8faf2ade4b86ceb0c86a11727c8d5 (patch) | |
| tree | df894a84f2386b276e07682473c7800dd36a9ee3 | |
| parent | 0aa9a96a54922cb6320c28169c27467f143c5a91 (diff) | |
| download | cgeo-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.java | 15 |
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"); + } } } |
