2013-02-05 5 views
17

Qualcuno può dirmi come posso salvare un elenco di oggetti personalizzati Serializable in SharedPreference? Sono nuovo per Android e voglio salvare un ArrayList<Contact> list in preferenze condivise.Salvataggio di elenchi di oggetti serializzabili in sharedPreferences

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; 
    } 



} 

risposta

7

È possibile utilizzare il formato JSON per serializzare i tuoi ArrayList e gli oggetti in esso contenuti, e quindi memorizzare il risultato String nella SharedPreferences.

Quando si desidera recuperare i dati, recuperare la stringa e utilizzare un JSONArray per recuperare ciascun oggetto e aggiungerlo a un nuovo ArrayList.

Altrimenti si può semplicemente utilizzare Object(Input/Output)Stream classi e scrivere in un file differente usando (per la scrittura)

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(); 
+1

THANKS iT WORKS –

3

modo più semplice fuori?

Converti in JSON e salvalo come String.

33

Un'altra buona soluzione è quella di utilizzare GSON. Ecco un esempio:

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; 
} 

Maggiori informazioni su GSON a http://code.google.com/p/google-gson/

Abbastanza semplice giusto? ;)
Fare attenzione

Problemi correlati