Jag har fastnat med mer eller mindre exakt samma problem och jag hittade en öppen defekt i frågan som är vettig...
https://code.google.com/p/android/issues/detail?id=174566
Min lösning - om än inte den bästa lösningen - är att aldrig stega databasrevisionen och spåra detta själv, och därför aldrig anropa onUpgrade()
, och gör en uppgradering manuellt när du uppdaterar appen.
Alternativt, om du har en liten DB som är skrivskyddad, kan du trigga kopian av db i tillgångar på varje onCreate()
i DBHelper
klass, men detta kan ge oönskade problem om filsystemet är fullt så gör det bara när du letar efter en bättre lösning.
@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());
}
}
Min app uppgraderas nu som den ska med min lösning och genom att bedöma hur lång tid det är sedan den här defekten uppstod från början kanske den aldrig åtgärdas alls...
Jag är ledsen att detta inte är en fullständig lösning på problemet, men det är åtminstone en väg framåt.