J'ai un ArrayList
avec des objets personnalisés. Chaque objet contient une variété de chaînes de caractères et des nombres. J'ai besoin de la matrice de rester dans les parages, même si l'utilisateur quitte l'activité et veut revenir à un moment plus tard, cependant je n'ai pas besoin de la matrice après l'application a été complètement fermé. J'ai d'économiser beaucoup d'autres objets à l'aide de la SharedPreferences
mais je ne peux pas trouver comment sauver mon tableau d'ensemble de cette façon. Est-ce possible? Peut-être SharedPreferences
n'est pas la façon d'aller à ce sujet? Est-il une méthode plus simple?
Réponses
Trop de publicités?Après API 11 les SharedPreferences Éditeur acceptent des Ensembles. Vous pouvez convertir votre Liste dans un HashSet ou quelque chose de similaire et de le stocker comme ça. Lorsque votre le lire, de le convertir en une liste de tableaux, à les trier si besoin, et vous êtes bon pour aller.
//Retrieve the values
Set<String> set = myScores.getStringSet("key", null);
//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
Vous pouvez également sérialiser votre liste de tableaux et ensuite enregistrer/lire/à partir de SharedPreferences. Ci-dessous est la solution:
EDIT: Ok, voici la solution pour sauver ArrayList comme objet sérialisé à SharedPreferences puis le lire à partir de SharedPreferences.
Parce que l'API prend en charge uniquement le stockage et la récupération de chaînes à/à partir de SharedPreferences (après API 11, sa plus simple), nous avons pour sérialiser et désérialiser l'objet ArrayList qui a la liste des tâches dans la chaîne.
Dans l' addTask()
méthode de la TaskManagerApplication classe, nous devons obtenir de l'instance de partage de préférence et ensuite le stocker sérialisé liste de tableaux à l'aide de l' putString()
méthode:
public void addTask(Task t) {
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
currentTasks.add(t);
//save the task list to preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
Editor editor = prefs.edit();
try {
editor.putString(TASKS, ObjectSerializer.serialize(currentTasks));
} catch (IOException e) {
e.printStackTrace();
}
editor.commit();
}
De même, nous avons à récupérer la liste des tâches à partir de la préférence dans l' onCreate()
méthode:
public void onCreate() {
super.onCreate();
if (null == currentTasks) {
currentTasks = new ArrayList<task>();
}
// load tasks from preference
SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
try {
currentTasks = (ArrayList<task>) ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Vous pouvez obtenir ObjectSerializer classe de Apache Pig projet ObjectSerializer.java
À l’aide de cet objet--> TinyDB--Android-partagé-préférences-Turbo de son très simple.
pour mettre
pour obtenir