Wpis z mikrobloga

Cześć, mam problem z bazą sqlite na androidzie. Otóż gdy wywołuję metodę getPayments() obiektu PaymentsDataSource, rzuca wyjątkiem, że tabela payments nie istnieje. Co nie powinno być prawdą, gdyż w klasie AndroidDbHelper przciążam metodę onCreate i uruchamiam zapytania tworzące tę i inne tabele. Wygląda jakby metoda onCreate się nie wywoływała, wie ktoś dlaczego tak jest? Przykładowy kod na http://pastebin.com/q81SRRZF

#programowanie #android
  • 5
@markaron: z tego co pamiętam, żeby wywołany został callback OnCreate w Helperze musi zostać otwarte połączenie do bazy danych. Co więcej onCreate zdaje się jest wywoływane tylko wtedy gdy baza danych nie istnieje, tj. plik DatabaseProvider.DATABASE_NAME jeszcze nie został zainicjowany. Jeśli wcześniej utworzyłeś inicjalnie bazę danych to pozostaje Ci tylko zmieniać wersję bazy danych i obsługiwać to w callbacku OnUpgrade, albo wyczyścić cache aplikacji ;)

Z dokumentacji SQLiteOpenHelper:

Called when the
@Garet_: Połączenie otwieram, w obiekcie korzystającym z PaymentsDataSource. To z istniejącą bazą danych wydaje się być dobrym tropem bo na samym początku miałem tylko tworzenie tabeli Expenses. Póżniej dopisałem pozostałe.

A jak zrobić czyszczenie cache aplikacji, ewentualnie usunąć bazę. Próbowałem
context.deleteDatabase(DatabaseProvider.DATABASE_NAME); w konstruktorze obiektu AndroidDbHelper, ale to też nie pomogło.
@markaron: Programowo w zasadzie nigdy nie usuwałem bazy danych.
Możesz to zrobić z poziomu managera aplikacji w samym androidzie: wyszukujesz dewelopowaną aplikację i czyścisz "Dane aplikacji". To powinno załatwić sprawę. Jeśli jednak nie chce Ci się tego robić to proponuję na czas dewu następujący workaround: modyfikujesz nazwę bazy danych w aplikacji i jedziesz dalej - doklejasz dodatkowy znak( ͡° ͜ʖ ͡°) Tylko pamiętaj aby później to