2011-07-21 17 views
5

Próbuję utworzyć bazę danych na mojej karcie SD. Ilekroć zadzwonić SQLiteDatabase.openOrCreateDatabase pojawia się błąd:Android otwórz lub utwórz bazę danych

07-21 13:33:17.587: ERROR/AndroidRuntime(5541): Caused by: android.database.sqlite.SQLiteException: unable to open database file

Czy ktoś wie co może być tego przyczyną? Oto kod mam w open() metody mojej klasy bazy danych:

File sdcard = Environment.getExternalStorageDirectory(); 

String dbfile = sdcard.getAbsolutePath() + File.separator+ "external_sd" + File.separator + Schema.DATABASE_NAME ; 

db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); 
+1

Na marginesie, dlaczego próbujesz zapisać bazę danych na karcie SD, a nie/danych/danych? –

+0

Chcę móc udzielać wsparcia użytkownikom, jeśli coś jest nie tak z danymi. W rzeczywistości pobiera dane z bazy danych serwera sql, więc chcę być w stanie wykryć i manipulować wszelkie nieoczekiwane dane. Przypuszczam, że mógłbym stworzyć kilka klas do importowania i eksportowania bazy danych z prywatnego magazynu. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Odpowiedz

8

Jednym z możliwych usterek na to może być, że nie ustawić odpowiednie uprawnienia

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Jednak przechowywanie danych na Karta SD jest uważana za niezabezpieczoną. Ponieważ każda aplikacja, która ma uprawnienia do przechowywania danych w pamięci SD, może uzyskać dostęp do bazy danych.

Edycja: Innym możliwym problemem jest to, że pamięć zewnętrzna może być niedostępna. Musisz się upewnić, że twoja pamięć zewnętrzna jest obecnie zapisywalna. Jedną z metod byłoby ustalenie stanu przez getExternalStorageState (patrz odnośnik here).

getExternalStorageState() returns MEDIA_SHARED if the media is present not mounted, and shared via USB mass storage. 

Reference. Istnieje również stackoverflow post na sprawdzenie stanu tutaj: Writing Text File to SD Card fails

+0

Mam już ten zestaw uprawnień w moim pliku manifestu. To jest dla aplikacji nierynkowych, więc nie martwię się o inne aplikacje próbujące uzyskać dostęp do moich danych. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Environment.getExternalStorageState() == udostępnione – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

To jest dokładnie twój problem @ == udostępniony – fyr

Powiązane problemy