2017-07-22 4 views
0

Je suis en train de la solution dans la réponse haut ici: Android ArrayList of custom objects - Save to SharedPreferences - Serializable?Impossible d'enregistrer SharedPreferences en utilisant Gson sur ArrayList d'objets personnalisés

Je suis en train de sauver à SharedPreferences un ArrayList d'objets personnalisés.

SharedPreferences appSharedPrefs = PreferenceManager.getDefaultSharedPreferences(baseApplication); 
SharedPreferences.Editor prefsEditor = appSharedPrefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson(masterPinList); 
prefsEditor.putString("masterPinList", json); 
prefsEditor.apply(); 

masterPinList est un ArrayList d'objets personnalisés (Pin).

L'erreur est:

java.lang.SecurityException: Can not make a java.lang.reflect.Method constructor accessible 

L'erreur se produit sur cette ligne:

String json = gson.toJson(masterPinList); 

Qu'est-ce qui ne va pas?

+0

Afficher le code pour 'Pin' – weston

+0

Pin a des références à l'application et d'autres objets personnalisés. Basé sur la réponse ci-dessous, et après avoir testé avec un autre objet personnalisé, j'ai trouvé qu'il serait plus facile de faire un objet Pin sans références à des contextes ou d'autres objets personnalisés dans l'application. – user1755043

Répondre

0

Vous pouvez essayer d'ajouter un constructeur vide à la classe car cela permettra de définir des valeurs.

public className() { 

} 
0

Votre objet est-il sérialisable? Cela pourrait être le problème. Voici un exemple de classe

public class PlanDateObject { 

@SerializedName("DateList") 
private List<String> dateList; 
@SerializedName("PlanList") 
private List<Plan> planList; 

public List<String> getDateList() { 
    return dateList; 
} 

public void setDateList(List<String> dateList) { 
    this.dateList = dateList; 
} 

public List<Plan> getPlanList() { 
    return planList; 
} 

public void setPlanList(List<Plan> planList) { 
    this.planList = planList; 
} 

}

+0

Est-ce que tous les autres objets personnalisés référencés par cet objet doivent également être sérialisables, parce que le simple fait de rendre Pin sérialisable ne fonctionne pas? – user1755043

+0

Oui. J'ai testé votre code avec cette classe et cela a fonctionné – FnR