Empfehlungen für persistente Daten auf Android?

8

Es gibt einen Webservice, der einige Daten bereitstellt, die von meiner App verwendet werden. Diese Daten sind ziemlich groß und ändern sich nur sehr selten, daher dachte ich, es wäre schön, wenn die App sie auf der SD-Karte zwischenspeichern und nur bei Bedarf aktualisieren könnte.

Momentan packe ich die Daten (eine XML-Datei) und analysiere sie mit SAX in einen Objektbaum. Dieser Vorgang dauert (höchstens) 2-3 Sekunden über mein WIFI. Das Serialisieren der resultierenden Objekte auf die SD-Karte dauert jedoch wesentlich länger (eine Minute oder länger), und das Deserialisieren dauert noch länger als das Herunterladen / Parsing.

Hat jemand irgendwelche Empfehlungen zur Verbesserung dieser oder alternativer Ideen zum Fortbestehen dieser Daten (außer einfach die XML-Datei zu speichern und jedes Mal zu reparieren)?

UPDATE: Dies ist mehr als eine triviale Sammlung von Datensätzen. Das Objekt-Diagramm ist wirklich lächerlich komplex und das Speichern in einer Datenbank würde zu Dutzenden von Tabellen mit nur einem einzigen Datensatz in jedem führen.

    
Jeremy Logan 07.01.2010, 21:05
quelle

5 Antworten

10

Android-Serialisierung ist notorisch langsam. Ich schlage vor, auf XML oder JSON (oder was auch immer) zu wechseln und die Datei so zu schreiben. Da Sie bereits einen XML-Parser haben, ist es möglicherweise am sinnvollsten, die ursprüngliche XML-Datei, die Sie heruntergeladen haben, zwischenzuspeichern und bei Bedarf erneut zu analysieren.

Ich habe in einer App von Serializable auf JSON-Dateispeicher umgestellt und die Geschwindigkeitszunahme war unglaublich, mindestens eine Größenordnung.

(Ich mag Ihre Frage falsch verstehen - ich nehme an, dass Sie Serializable zum Schreiben auf die Disc verwenden. Wenn Sie das XML reproduzieren, bin ich mir nicht sicher, warum es auf der SD-Karte so viel langsamer ist stimme zu, dass die SQLite-Datenbank in der Regel am sinnvollsten ist, aber wie Sie bereits festgestellt haben, passt sie nicht zu den Anforderungen Ihrer Anwendung.)

    
Daniel Lew 07.01.2010, 22:05
quelle
3

Auch wenn Ihre Daten nicht mindestens 100 KB groß sind, würde ich vorschlagen, sie nur in Ihrem privaten Speicher anstatt auf der SD-Karte zu speichern. Beachten Sie, dass Sie sich nicht darauf verlassen können, dass die SD-Karte verfügbar ist.

    
hackbod 07.01.2010 23:32
quelle
0

Ich habe gerade eine Android-Anwendung für die letzte Woche geschrieben, die das grundsätzlich tut. Es ruft einige (große) XML-Dateien online ab und zeigt dann einen Teil der Daten in verschiedenen Ansichten an.

Wir machen es, indem wir den XML-Code mit SAX abrufen und parsen und ihn (während des Parsens) in eine SQLite-Datenbank schreiben. Und dann fragen wir die Datenbank jedes Mal ab, wenn wir eine Ansicht des Datensatzes anzeigen müssen.

Funktioniert wie ein Zauber und ist schnell genug, um viele Daten in einem Google Map-Overlay anzuzeigen, wo wir die Datenbank bei jedem Aufruf der Zeichenmethode unserer Kartenüberlagerung abfragen.

Also würde ich definitiv vorschlagen, für eine SQLite-Datenbank zu gehen, wenn die Daten im XML-Dokument können leicht in einer Datenbank dargestellt werden.

    
Bjarke Freund-Hansen 07.01.2010 21:32
quelle
0

Wenn der Webservice Ihnen nur eine bestimmte Anzahl von Ergebnissen geben kann (etwa: requestData zwischen Index 1 und 10 oder geben Sie mir zuerst 25 Ergebnisse), versuchen Sie dies zu benutzen (setzen Sie eine einfache Schaltfläche "Mehr Ergebnisse laden" oder implementieren Sie ein automatischer Lademechanismus). Wenn der Webdienst diese Funktion nicht bietet, versuchen Sie, Ihre XML-Datei auf SD-Karte zu speichern, und wenn Sie die Daten benötigen, versuchen Sie, nur eine bestimmte Anzahl von Ergebnissen zu analysieren. Hoffe diese Hilfe!

    
Ungureanu Liviu 08.01.2010 15:33
quelle
-2

Warum benutzt du keine Datenbank? Weitere Informationen finden Sie im Android-Datenspeicher

    
Max Gontar 07.01.2010 21:12
quelle

Tags und Links