Download SQLite-Datenbank aus dem Internet und laden in Android-Anwendung
Für mein android Anwendung, ich möchte mit einer großen Datenbank (über 45 MB).
Eine Lösung wäre, die (abgespaltenen) Datenbank im assets-Ordner und kopieren Sie Sie in das Datenbank-Verzeichnis auf den ersten Start.
Aber das würde den Speicherplatz zweimal - das eine mal in den assets Ordner, wo die Datei kann nicht gelöscht werden und eine Zeit in der Datenbank-Verzeichnis, wo es kopiert wurde.
Also ich würde eher zum download der Datenbank aus dem Internet (webserver) auf die ersten Starts. Wie könnte ich dies tun? Kann ich laden Sie einen vollständigen SQLite-Datei und speichern Sie es auf dem Datenbank-Verzeichnis? Oder sollte ich doch lieber mit JSON-Daten-Dateien, die verwendet werden, um die Datenbank zu füllen?
InformationsquelleAutor caw | 2012-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es nicht gespalten werden müssen, nur RV. Sehen
SQLiteAssetHelper
für ein Beispiel.Verwenden
HttpUrlConnection
. Oder, verwenden SieHttpClient
.Ja. Verwenden
getDatabasePath()
, um die richtigen lokalen Pfad zu verwenden.Könnte man, aber für die 45MB, das wäre grauenhaft langsam.
SQLiteAssetHelper
sieht interessant aus, aber trotzdem die maximale Größe des Vermögens 1 MB groß ist, ist es nicht? Es ist also egal, wenn die Datei gezippt ist oder nicht - es ist das limit. Also würden Sie empfehlen, dieSQLiteAssetHelper
oder das herunterladen von einem webserver?maximale Größe des Vermögens 1 MB groß ist, ist es nicht?" -- AFAIK, das ist die maximale Größe einer Anlage, die komprimiert durch
aapt
. Sie haben größere Vermögen, dass, dass, so lange wieaapt
nicht komprimieren, weshalbSQLiteAssetHelper
verwendet eine ZIP-Datei. Ihre Argumente für das herunterladen von einem Webserver sind immer noch sehr gültig ist (z.B. doppelte Leerzeichen) - ich war lediglich der Klärung Ihrer "gesplittet" Referenz, für andere die Begegnung mit dieser Frage. BTW, man könnte auchDownloadManager
zum herunterladen der Datenbank, aber Sie würden dann bewegen Sie ihn in die endgültige position, die Sie sich einmal heruntergeladen.InformationsquelleAutor CommonsWare
Wurde gefragt, welche Lösung ich am Ende mit, hier ist der code, den ich verwendet (in etwa). Es kann nicht mehr füllen, und es ist nicht elegant oder sauber, entweder. Aber vielleicht kann es Ihnen helfen.
MyActivity.java
Database.java
public class Datenbank extends SQLiteOpenHelper {
}
Du hast Recht, dies ist jetzt überflüssig. Allerdings, wenn Sie nicht die Datei umbenennen, müssen Sie ändern Sie den Namen beim schreiben der Datenbank-Datei auf der Festplatte. Ich habe bearbeitet die Antwort. Bitte beachten Sie, dass es mehrere andere Stücke in diesem Ausschnitt, dass kann verbessert werden, oder sind sogar überflüssig.
Ich habe Probleme mit dem herunterladen einer sqlite-db und in der app.. im Grunde ist die SQLite-wirft einen Fehler, dass die db beschädigt ist, was nicht der Fall ist. Wenn ich daran denke, wie es aussieht, Korruption Fehler wird ausgelöst, wenn die db geändert wird, ohne geöffnet wird (zum Beispiel löschen Sie alte db-Datei + download neue) Könnte es das sein? Hattest du diese Probleme?
InformationsquelleAutor caw
Ich denke, dass die JSON-Ansatz wäre eine bessere Idee, wenn Ihre Datenbank ist groß.
Bin ich mir nicht 100% sicher, aber ich glaube, dass beim release ein update zu Ihrer Anwendung, Ihrem Gerät laden Sie die gesamte Anwendung. Wenn Sie die Bündelung eine 45mb-Datei mit Ihrer Anwendung würde das bedeuten, dass jedes mal, wenn Sie drücken ein update, Ihre Nutzer werden Sie stecken mit Download eine 45mb-Datei. Keine gute Idee.
Was Sie tun können, gehören die richtig strukturierte Datenbank, ohne Daten in Ihre Anwendung. Wenn der Benutzer die Anwendung öffnet, könnte es eine Verbindung zu Ihrem web-server und Holen Sie sich die JSON-Daten, um die Datenbank zu füllen. Auf diese Weise, wenn der Benutzer aktualisiert die Anwendung, die Sie nicht bekommen, stecken mit dem herunterladen einer neuen großen Datei. Updates wischen Sie nicht aus bestehenden Datenbanken.
Könnte man auch ausgefallene Dinge und bekommen Teile der Datenbank durch JSON, bis der Benutzer die alles hat. Auf diese Weise, wenn Sie tun, ein monster Abfrage und Sie verlieren die Verbindung zum internet nichts allzu schlimmes passieren wird.
InformationsquelleAutor Nic Raboy