S'il vous plaît voir ce fil de Android API FAQ, ici vous trouverez sûrement la solution la plus adaptée à votre problème (si vous avez besoin d'un court-vie ou une donnée de longue durée).
Les singletons sont utilisés pour les objets à cycle de vie court.
Modifier: S'il vous plaît garder à l'esprit que, pour grande quantité de données, il est toujours une meilleure idée d'utiliser les bases de données/structurated fichiers locaux (bien que ces derniers sont consommateur en ressources pour lecture/écriture). Et si vous travaillez avec un objet très complexe, choisir SharedPreferences
peut aussi causer des maux de tête.
Un échantillon de stockage/chargement d'une liste de SharedPreferences
:
// the name with which to store the shared preference
public static final String PERSON_LIST = "my.personlist";
// a sample data structure that will be stored
public static final class Person
{
private String name;
private int age;
public String toString()
{
return name + "|" + age;
}
// splits the passed String parameter, and retrieves the members
public static Person loadPersonFromString(final String personString)
{
final Person p = new Person();
final String[] data = personString.split("|");
p.name = data[0];
p.age = Integer.parseInt(data[1]);
return p;
}
}
/**
* Saves the current list of Persons in SharedPreferences
* @param persons: the list to save
*/
public void savePersonList(final ArrayList<Person> persons)
{
final SharedPreferences prefs = PreferenceManager.
getDefaultSharedPreferences(getApplicationContext());
final Editor editor = prefs.edit();
final StringBuilder builder = new StringBuilder();
for (final Person person : persons)
{
if (builder.length() > 0)
builder.append("-Person-");
builder.append(person.toString());
}
editor.putString(PERSON_LIST, builder.toString());
editor.commit();
}
/**
* Loads the list of Persons from SharedPreferences
* @return the loaded list
*/
public ArrayList<Person> loadPersonList()
{
final SharedPreferences prefs = PreferenceManager.
getDefaultSharedPreferences(getApplicationContext());
final ArrayList<Person> persons = new ArrayList<Menu.Person>();
final String[] array = prefs.getString(PERSON_LIST, "").split("-Person-");
for (final String personString : array)
{
if (personString.length() > 0)
persons.add(Person.loadPersonFromString(personString));
}
return persons;
}
Pouvez-vous poster du code de votre classe Singleton? J'utilise une solution similaire sans aucun problème. – mouser58907
Si vous souhaitez conserver une variable globale entre activités, conservez-la dans Application. Étendez une classe à partir de Application et ajoutez-la dans votre fichier AnddroidManifest. – Tarun
La suggestion de Tarun est une bonne façon de le faire sur Android, mais il n'y a aucune raison que votre singleton ne fonctionne pas aussi bien. Je suis avec Mouser, si vous pouviez partager votre code, nous allons jeter un coup d'oeil. – kcoppock