8
votes

Recommandations pour persister les données sur Android?

Il existe un service Web qui fournit certaines données que mon application utilise. Ces données sont relativement importantes et ne changent que très rarement, je pensais que ce serait bien si l'application pouvait le mettre en cache sur la carte SD et ne le mettre à jour que si nécessaire.

Actuellement, je saisis les données (un fichier XML) et l'analyse dans un arborescence d'objet à l'aide de saxo. Ce processus prend (au plus) 2-3 secondes sur mon WiFi. Cependant, sérialiser les objets résultants à la carte SD prend beaucoup plus longtemps (une minute ou plus) et la désériorialisant qu'il prend encore plus de temps que de télécharger / analyser en premier lieu.

Quelqu'un a-t-il des recommandations pour améliorer ces idées ou alternatives pour persister ces données (autre que simplement enregistrer le fichier XML et se répandre à chaque fois)?

Mise à jour: Ceci est plus qu'une collection triviale d'enregistrements. Le graphique d'objet est en fait ridiculement complexe et le stocker dans une base de données entraînerait des dizaines de tables avec un seul enregistrement de chacun.


0 commentaires

5 Réponses :


-2
votes

Pourquoi n'utilisez-vous pas de base de données? Voir Guide de stockage de données Android


4 commentaires

Un dB n'a pas de sens pour cette application ... J'aimerais, mais c'est juste la mauvaise technologie.


c'est ce qu'ils ont dit à propos de la base de données web il y a 10 ans


Merci pour la condescendance ... c'est utile.


Vous auriez probablement de meilleures réponses si vous avez donné un indice à votre application. Sinon, vous limitez les conseils que les gens peuvent vous donner en limitant tout à vos choix de conception actuels.



0
votes

Je viens d'écrire une application Android pour la semaine dernière qui le fait essentiellement. Il récupère un fichier xml (grand) fichier XML en ligne, puis affiche une partie des données de diverses vues.

Nous le faisons en récupérant et à l'analyse du XML à l'aide de saxo et (lors de l'analyse) écrit tout dans une base de données SQLITE. Et puis nous ne faisons que interroger la base de données à chaque fois que nous devons afficher une certaine vue de l'ensemble de données.

fonctionne comme un charme et est suffisamment rapide pour afficher de nombreuses données sur une superposition de Google Map, où nous interrogeons la base de données sur chaque appel à la méthode de dessin de notre superposition de carte.

Donc, je vais certainement suggérer d'aller pour un Base de données SQLITE < / a>, si les données du document XML sont facilement représentées dans une base de données.


0 commentaires

10
votes

La sérialisation Android est notoirement lente. Je vous suggère fortement de passer à l'utilisation de XML ou JSON (ou autre) et d'écrire le fichier de cette façon. Comme vous avez déjà un analyseur XML, il peut avoir le plus de sens pour mettre en cache le fichier XML d'origine que vous avez téléchargé et le répare si nécessaire.

Je suis passé de Serializable au stockage de fichiers JSON dans une application avant et que l'augmentation de la vitesse était incroyable, au moins un ordre de grandeur.

(Je peux me mal comprendre votre question - je suppose que vous utilisez sérialisable pour écrire sur le disque. Si vous reproduisez le XML, je ne sais pas pourquoi il est tellement plus lent sur la carte SD. Aussi, je Convenez que la base de données SQLite a le plus de sens typique, mais comme vous l'avez déjà dit, cela ne répond pas aux besoins de votre application.)


2 commentaires

J'avais sérieusement envisagé de stocker le fichier XML directement à partir du serveur (et probablement du testament) ... Cela semblait simplement désérialiser des objets chaque fois que les données sont nécessaires "devraient" être plus rapide que la rentrée d'un fichier XML.


La sérialisation de l'objet fonctionne car il est très générique et le code générique peut fonctionner très lentement. En outre, le stockage est beaucoup plus grand; Je pense que j'ai diminué de la taille des fichiers de plus de 10 kilo-octets avec une sérialisation sous un kilo-octet (qui comptez Gzipping mon JSON).



3
votes

Également, à moins que vos données ne soient d'au moins 100% de KB, je suggérerais simplement de la stocker dans votre stockage de données privé au lieu de la carte SD. N'oubliez pas que vous ne pouvez pas compter sur la carte SD disponible.


0 commentaires

0
votes

Si le service Web peut vous donner juste un nombre spécifié de résultats (quelque chose comme: requestData entre Index 1 et 10 ou me donner les 25 premiers résultats) Essayez d'utiliser cela (mettre un simple "chargement plus de résultats" "ou implémenter un mécanisme de chargement automatique). Si le service Web ne fournit pas cette fonctionnalité, essayez d'enregistrer votre XML sur SDCard et lorsque vous avez besoin des données, essayez d'analyser juste un nombre de résultats spécifié. J'espère que cette aide!


0 commentaires