Enregistrement de la liste des objets sérialisables dans SharedPreferences

Quelqu'un peut-il me dire comment je peux enregistrer une liste d'objets Serializable personnalisés dans SharedPreference ? Je suis nouveau sur Android et je souhaite enregistrer une liste ArrayList<Contact> list dans les préférences partagées.

 public class MainActivity extends SherlockFragmentActivity { PlaceSlidesFragmentAdapter mAdapter; ViewPager mPager; PageIndicator mIndicator; public static final String TAG = "detailsFragment"; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.main, container, false); mAdapter = new PlaceSlidesFragmentAdapter(getActivity() .getSupportFragmentManager()); mPager = (ViewPager) view.findViewById(R.id.pager); mPager.setAdapter(mAdapter); mIndicator = (CirclePageIndicator) view.findViewById(R.id.indicator); mIndicator.setViewPager(mPager); ((CirclePageIndicator) mIndicator).setSnap(true); mIndicator .setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { Toast.makeText(MainActivity.this.getActivity(), "Changed to page " + position, Toast.LENGTH_SHORT).show(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); return view; } } 

  • Mode autofit Android entraînant des problèmes avec la largeur css dans la page Web
  • Android et iOS: comment développer pour les deux?
  • Configurez une application Qt5 5.7 pour Android avec CMake
  • Est-il disponible pour configurer checkSelfPermission sur SDK minimum <23?
  • Comment puis-je diviser une chaîne par rupture de ligne?
  • Convertissez un site Web en une application Android
  • 4 Solutions collect form web for “Enregistrement de la liste des objets sérialisables dans SharedPreferences”

    Vous pouvez utiliser le format JSON pour sérialiser votre ArrayList et les objets qu'il contient, puis stocker le résultat String dans SharedPreferences .

    Lorsque vous souhaitez récupérer les données, récupérez la Chaîne et utilisez un JSONArray pour récupérer chaque objet et l'ajouter à une nouvelle ArrayList.

    Sinon, vous pouvez simplement utiliser des classes de Object(Input/Output)Stream et l'écrire dans un fichier différent en utilisant (pour l'écriture)

     FileOutputStream fos = this.openFileOutput(fileName, MODE_PRIVATE); final OutputStreamWriter osw = new OutputStreamWriter(fos); JSONArray array = new JSONArray(); // Add your objects to the array osw.write(array.toString()); osw.flush(); osw.close(); 

    Une autre bonne solution est d'utiliser GSON. Voici un exemple:

     private static final String MAP = "map"; private static final Type MAP_TYPE = new TypeToken<Map<MyObjA, MyObjB>>() {}.getType(); private static SharedPreferences prefs = MyApplication.getContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); private static Map<MyObjA, MyObjB> myMap; public static void saveMap (Map<MyObjA, MyObjB> map) { SharedPreferences.Editor editor = prefs.edit(); editor.putString(MAP, new Gson().toJson(map)); editor.commit(); myMap = map; } public static Map<MyObjA, MyObjB> loadMap() { if (myMap == null) { myMap = new Gson().fromJson(prefs.getString(MAP, null), MAP_TYPE); } return myMap; } 

    Plus d'informations sur gson à http://code.google.com/p/google-gson/

    Assez simple, n'est-ce pas? 😉
    Prends soin

    La sortie la plus simple?

    Convertit en JSON et enregistrez-le en tant que String .

    Si elle est déjà sérialisée, vous pouvez simplement l'insérer. La réponse acceptée dans cette publication vous indiquera: Save ArrayList to SharedPreferences

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.