Utknąłem z mniej więcej tym samym problemem i znalazłem otwartą wadę w tej sprawie, która ma sens...
https://code.google.com/p/android/issues/detail?id=174566
Moje obejście - choć nie jest to najlepsze rozwiązanie - polega na tym, aby nigdy nie przechodzić wersji bazy danych i samodzielnie tego śledzić, dzięki czemu nigdy nie wywoływać funkcji onUpgrade()
i ręcznie wykonaj aktualizację podczas aktualizacji aplikacji.
Alternatywnie, jeśli masz małą bazę danych, która jest tylko do odczytu, możesz wywołać kopię bazy danych w zasobach przy każdym onCreate()
w DBHelper
klasy, ale może to spowodować niepożądane problemy, jeśli system plików jest pełny, więc rób to tylko podczas szukania lepszego rozwiązania.
@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());
}
}
Moja aplikacja aktualizuje się teraz tak, jak powinna, dzięki mojemu obejściu i oceniając, ile czasu minęło, odkąd ta usterka została pierwotnie zgłoszona, może nigdy nie zostać naprawiona...
Przykro mi, że to nie jest pełne rozwiązanie problemu, ale przynajmniej jest to droga naprzód.