2011-04-03 4 views
1

Je suis dans les premières étapes d'une application de prise de notes pour android et j'espère que quelqu'un peut me diriger vers une bonne solution pour stocker les données de note.Stockage de documents basé sur des fichiers dans android

Idéalement, je suis à la recherche d'une solution où:

  • Chaque document note est un fichier séparé (pour dropbox synchronisation)
  • Une note peut être composée de plusieurs pages
  • pages Note peut avoir des données binaires (telles que des images)
  • Une seule page peut être chargée sans avoir à analyser le document entier en mémoire
  • Sécurité de thread: plusieurs lectures/écritures peuvent se produire en même temps.

XML est sorti (au moins pour le fichier entier), car je n'ai pas un bon moyen d'extraire une seule page à la fois. J'ai envisagé d'utiliser des fichiers zip, mais (surtout lorsqu'ils sont compressés) je pense qu'ils seraient bloqués en chargeant le fichier entier aussi.

Il semble qu'il devrait y avoir une bibliothèque Java là-bas qui fait cela, mais mon google-fu échoue. La seule autre alternative que je peux penser est de faire une base de données sqlite séparée pour chaque note.

Est-ce que quelqu'un connaît une bonne solution à ce problème? Merci!

Répondre

2

On dirait qu'une base de données relationnelle fonctionnerait ici. Vous avez juste besoin de jouer un peu avec le schéma.

Peut-être faire une table Pages avec chaque page, y compris, disons, un champ pour le document auquel il appartient et un champ pour sa commande dans le document. Pages pourrait également avoir un champ pour les données binaires, qui pourraient être contenues dans une autre table. Si le document lui-même contient des données supplémentaires, vous avez peut-être aussi une table pour les documents.

Je n'ai pas utilisé les transactions SQLite sur un appareil Android, mais il semble que ce serait un bon moyen d'aborder la sécurité des threads.

1

Je recommande d'utiliser SQLite pour stocker les documents. En fin de compte, ce sera plus facile que d'essayer de gérer les E/S de fichier chaque fois que vous accédez à la note. Ensuite, quand quelqu'un veut télécharger vers Dropbox, vous générez le fichier à la volée et le télécharger. Il serait logique d'avoir une table Notes et une table de pages, au moins. De cette façon, vous pouvez charger chaque page individuellement et une note est juste une collection de pages de toute façon. En outre, vous pouvez stocker des images en tant que BLOBS dans la base de données pour une page particulière. Fondamentalement, si vous voulez seulement un type de contenu par page, alors vous aurez, dans le tableau des pages, quelque chose comme une colonne id et une colonne de contenu. Alternativement, si vous vouliez prendre en charge quelque chose de plus complexe, tel que plusieurs types de contenu, vous auriez besoin de faire de vos pages une collection d'autre chose, comme des "entités". IMO, une base de données relationnelle va être le moyen le plus facile d'accomplir votre exigence de lire à partir de pages particulières sans avoir à charger le fichier entier.

Questions connexes