2017-06-18 1 views
0

méthode de sauvegarde (Sauver la liste est un Arraylist):Enregistrement et lecture ArrayList

public static void saveList(){ 
    editor.putString("list", Calculate.saveList.toString()); 
} 

Ma méthode de lecture (probablement où mon problème est):

public static void readList(){ 
    String arrayString= prefs.getString("list", null); 
    Calculate.saveList = (ArrayList<String>) Arrays.asList(arrayString.split(",")); 
} 

erreur Logcat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tsury.icalorie/com.tsury.icalorie.SavedActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference

J'ai besoin de sauvegarder cette ArrayList et bien sûr de la lire plus tard.

+0

Faites-vous sûr d'appeler '.Appliquer()' 'ou .commit()' 'sur votre objet lorsque editor' économie? – frasertmay

+0

L'a fait, maintenant j'obtiens cette erreur - java.lang.RuntimeException: Impossible de démarrer l'activité ComponentInfo {com.tsury.icalorie/com.tsury.icalorie.SavedActivity}: java.lang.ClassCastException: java.util.Arrays $ ArrayList ne peut pas être converti en java.util.ArrayList –

+0

J'ai mis ma réponse dans une réponse – frasertmay

Répondre

0

Vous pouvez convertir votre liste de tableau en chaîne JSON et l'enregistrer en tant que chaîne et lire cette chaîne JSON et le convertir en votre objet.

vous pouvez utiliser la bibliothèque Gson pour cela.

Pour ce faire, les étapes:

1- ajouter cette dépendance dans votre fichier Gradle

compile 'com.google.code.gson:gson:2.7' 

faire une classe qui garder votre ArrayList

class MyList{ 
    @SerializedName("myStrings") 
    public ArrayList<String> myStrings; 
} 

créer une instance de classe MyList et ajouter vos valeurs dans myStrings.

MyList myListInstance=new MyList(); 
myList.myStrings.add("Peter"); 
myList.myStrings.add("John"); 
myList.myStrings.add("Faraz"); 

puis Conver votre objet MyList à JSON en utilisant cette ligne:

String json=new Gson().toJson(myListInstance) 

et enregistrer cette chaîne JSON dans sharedPreferences

lorsque vous voulez charger vos données lire votre chaîne JSON de sharedPreferences et puis le convertir en votre objet en utilisant cette ligne

MyList myList = new Gson().fromJson(json, MyList.class); 
+0

Y at-il un exemple pour le faire? –

+0

J'ai édité ma réponse –

+0

Comment devrais-je faire cela: "créer une instance de la classe MyList et ajouter une chaîne de vos valeurs dans myString."? –

0

Mak e Assurez-vous d'appeler le .apply() ou le .commit() sur votre objet éditeur lors de l'enregistrement.

Vous pouvez également ne pas jeter Arrays.asList() à un ArrayList, vous devez créer avec

Calculate.saveList = new ArrayList<String>(Arrays.asList(arrayString.split(",")));