2011-09-01 4 views
1

J'ai quelques informations qui doivent être stockées dans la mémoire interne. Je vais stocker sous la forme de paires clé-valeur comme cela est fait dans SharedPreferences. Je pensais créer JsonObject et sauvegarder et récupérer de cette façon. Existe-t-il un autre moyen de sauvegarder les données dans la mémoire interne sous la forme de paires clé-valeur?Comment stocker des paires clé-valeur dans un fichier qui sera stocké dans la mémoire interne d'Android?

Cordialement Sunil

+0

essayer d'utiliser hashmap .. –

+0

Vais-je être en mesure de stocker le hashmap dans un fichier puis le récupérer plus tard? – sunil

+0

oui vous pouvez le faire. –

Répondre

1

Th java Standard façon de stocker des données d'objets est d'utiliser sérialisation - c'est-ce qu'il est là pour ça. Dans la plupart des cas, l'implémentation de Serializable est assez simple. This Site offre un bon tutoriel sur les bases de la sérialisation, qui peut être adapté à l'environnement Android assez facilement. En créant une HashMap, vous pouvez sérialiser la HashMap dans un fichier pour faciliter la récupération de vos données sous forme de clé/valeur. À peu près toutes les collections de la bibliothèque prennent en charge Serializable de sorte que vous pouvez également stocker d'autres types de carte/liste. Donc, à utiliser - Sérialisation ou JSONObject? Cela dépend vraiment de l'importance de l'efficacité et de la complexité des choses que vous voulez stocker.

Généralement, le coût le plus élevé dans les deux cas est l'écriture de données dans le fichier, de sorte que JSONObjects sera presque toujours plus petit et plus simple, il peut être un peu plus rapide. C'est très bien pour stocker des chaînes ou des objets très simples qui peuvent être facilement convertis en JSON. Si vous avez une classe très complexe avec des dizaines de membres et de nombreux états possibles, il peut être plus simple et efficace d'utiliser la sérialisation. La différence de coût réelle entre ces options dans la plupart des cas sera négligeable et ne serait vraiment important si vous deviez pré-lire et écrit de nombreuses fois.

Il faut donc utiliser JSON pour les types de base et sérialisation pour des types complexes (vous pouvez même stocker un objet sérialisé dans un objet JSON!)

0

Un SQLiteDatabase très basique fera le travail. Il y a des tas de didacticiels et tout ce dont vous avez besoin est une table unique avec 3 colonnes: _id, key, value.

J'ai personnellement trouvé This Tutorial un bon point de départ.

DB est toujours besoin d'un contexte pour faire rouler la balle, donc pour un simple get/situation décrite comme celui-ci, la création d'une petite classe avec les signatures de méthode suivantes va rendre la vie très facile:

public static void set(Context context, String key, String value); 
public static String get(Context context, String key); 

Pour en savoir plus objets complexes, utilisez Parcelable ou sérialisation:

public static void set(Context context, String key, Serializable value); 
public static Serializable(Context context, String key); 
+0

Merci beaucoup, mais je connais déjà la base de données et SharedPreferences. Je dois enregistrer l'information dans la mémoire interne seulement puisque cette information ne devrait jamais être perdue même si l'utilisateur efface le cache de l'application. – sunil

+0

L'utilisation d'une base SQLiteDatabase * sera enregistrée dans la mémoire interne. Vous pouvez choisir si elle est enregistrée dans la partie de cache ou non. – Dave

+0

Désolé, votre question ne disait pas que vous aviez besoin que les données soient 'indétectables'. Je ne suis pas sûr d'empêcher l'effacement de DB, excepté que je crois que c'est seulement disponible aux applications de système. –

Questions connexes