2010-06-10 9 views
6

Moje pytanie jest dość proste, ale nie sądzę, że odpowiedź będzie ... Mam dość dużo treści, które mam w mojej aplikacji aby działał poprawnie, i myślę o umieszczeniu tego wszystkiego w bazie danych, i rozprowadzam go w osadzonej bazie danych z aplikacją na rynku. Jedyny problem polega na tym, że nie mam pojęcia, jak to zrobić. Wiem, że mogę wyodrębnić plik .db z Eclipse DDMS z zawartością mojej bazy danych, i przypuszczam, że muszę umieścić go w folderze zasobów mojej aplikacji, ale potem jak sprawić, by aplikacja użyła go do ponownego wygenerowania aplikacji Baza danych? Jeśli masz jakiś link do jakiegoś kodu lub pomocy, byłoby wspaniale. DziękiOsadź bazę danych w pliku .apk aplikacji rozproszonej [Android]

Odpowiedz

12

dobrze osiągnąć co pytasz, można umieścić plik db w aktywa/katalogu i skopiować go na miejsce po raz pierwszy uruchomić aplikację .....

final String DB_DESTINATION = "/data/data/YOUR_PACKAGE_NAME/databases/MyDatabaseFile.db"; 

// Check if the database exists before copying 
boolean initialiseDatabase = (new File(DB_DESTINATION)).exists(); 
if (initialiseDatabase == false) { 

    // Open the .db file in your assets directory 
    InputStream is = getContext().getAssets().open("MyDatabaseFile.db"); 

    // Copy the database into the destination 
    OutputStream os = new FileOutputStream(DB_DESTINATION); 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = is.read(buffer)) > 0){ 
     os.write(buffer, 0, length); 
    } 
    os.flush(); 

    os.close(); 
    is.close(); 
} 

Gdzie "initialiseDatabase" to jakaś flaga wskazująca, czy aplikacja została uruchomiona po raz pierwszy.

Mimo że, patrząc na przechowywanie dużej ilości danych, jak wspomniałeś: zdecydowanie zalecam unikanie nadpisywania pliku APK i używanie połączenia internetowego do pobierania rekordów bazy danych (z hostowanego serwera) po aplikacja została uruchomiona. W ten sposób możesz pokazać pasek postępu wskazujący użytkownikowi, dlaczego długo czeka na rozpoczęcie korzystania z aplikacji. Sprawienie, że APK jest szczególnie duży, zazwyczaj zniechęca ludzi do instalowania go w pierwszej kolejności.

+0

Cóż, wcześniej korzystałem z paska postępu, ale ponieważ pobieram dużo obrazów i parsuję kilka XML , zajmuje sporo czasu, zwłaszcza, gdy używasz sieci 3G zamiast WiFi – Sephy

+0

czy nie byłoby łatwiej po prostu sprawdzić, czy baza danych już istnieje, zamiast używać boolean? Jak śledzić wartość logiczną, gdy aplikacja jest wyłączona? wpis w DB? – Sephy

+0

To jest dokładnie to, co reprezentuje boolean, zostawiłem to jako ćwiczenie implementacyjne. Zaktualizowałem przykładowy kod o tym, jak możesz to zrobić. – seanhodges

1

Można zaimplementować rozwiązanie typu middle-of-road: Użyj powyższej metody, ale zamiast dystrybuować plik db, umieść go gdzieś na serwerze. Z mojego doświadczenia wynika, że ​​pobieranie plików zajmuje tylko 10% czasu przetwarzania, pozostałe to przetwarzanie i serializowanie obrazów do db

+0

Właściwie moim celem było uniknięcie umieszczania go na serwerze i wymuszania pobierania bezpośrednio po instalacji aplikacji ... – Sephy

+0

Rozumiem. Rozważałem to dla mojej aplikacji, ale potem przyjrzałem się rozmiarowi db i jego kolejnym + 350K. Ludzie mają w tym dużo dezorientacji, ale jeśli masz przyzwoite połączenie, to z pewnością będzie to szybsze niż fragmentaryczne pobieranie z późniejszym przetwarzaniem – Bostone

Powiązane problemy