Uvízl jsem u víceméně přesně stejného problému a našel jsem v této záležitosti otevřený defekt, který dává smysl...
https://code.google.com/p/android/issues/detail?id=174566
Moje řešení - i když to není nejlepší řešení - je nikdy nekrokovat revizi databáze a nesledovat to sám, takže nikdy nevolat onUpgrade()
a ručně provést upgrade při aktualizaci aplikace.
Alternativně, pokud máte malou databázi, která je pouze pro čtení, můžete spustit kopii databáze v aktivech na každém onCreate()
v DBHelper
class, ale to může způsobit nechtěné problémy, pokud je souborový systém plný, takže to udělejte pouze při hledání lepšího řešení.
@Override
public void onCreate(SQLiteDatabase db) {
// Workaround for Issue 174566
myContext.deleteDatabase(DB_NAME);
try {
copyDataBase();
}
catch(IOException e) {
System.out.println("IOException " + e.getLocalizedMessage());
}
}
Moje aplikace se nyní upgraduje tak, jak by měla, s mým řešením a podle posouzení, jak dlouho uplynula od doby, kdy byla tato vada původně nahlášena, nemusí být nikdy opravena...
Je mi líto, že to není úplné řešení problému, ale je to přinejmenším cesta vpřed.