18

Can anyone tell me how I can save a list of custom Serializable objects into SharedPreference? I am new To Android and I want to save an ArrayList<Contact> list into shared preferences.

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



}
Macarse
  • 91,829
  • 44
  • 175
  • 230
Usman Riaz
  • 2,920
  • 10
  • 43
  • 66

5 Answers5

33

Another good solution is to use GSON. Here's an example:

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

More information about gson at http://code.google.com/p/google-gson/

Pretty simple right? ;)
Take care

GuilhE
  • 11,591
  • 16
  • 75
  • 116
7

You can use the JSON format to serialize your ArrayList and the objects it contains, and then store the String result into the SharedPreferences.

When you want to get the data back, retrieve the String and use a JSONArray to retrieve each object and add it to a new ArrayList.

Otherwise you can simply use Object(Input/Output)Stream classes and write it into a differente file using (for writing)

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();
Mickäel A.
  • 9,012
  • 5
  • 54
  • 71
3

Easiest way out?

Convert to JSON and save it as a String.

Macarse
  • 91,829
  • 44
  • 175
  • 230
1

If it's already serialized, then you can just put it in. the accepted answer in this post will point you in the direction: Save ArrayList to SharedPreferences

Community
  • 1
  • 1
mango
  • 5,577
  • 4
  • 29
  • 41
0

try this, works for me :

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

DataList.java :

import java.util.List;

public class DataList {
    List<Data> dataList;

    public List<Data> getDataList() {
        return dataList;
    }

    public void setDataList(List<Data> dataList) {
        this.dataList = dataList;
    }
}

MainActivity.java :

    List<Data> fetchLog = new ArrayList<Data>();
    DataList dataList = null;


    dataList = new DataList();
    Gson gson = new Gson();

    //SAVE List As SharedPreferences
    Data data = new Data("ali",20);
    fetchLog.add(data);
    dataList.setDataList(fetchLog);
    Gson gson = new Gson();
    String json = gson.toJson(dataList);
    
    utils.setPref("logs", json);// function to set SharedPreferences


    // read List from SharedPreferences
        String json = utils.getPref("logs");// function to read SharedPreferences
        if (! json.equals("")) {
            dataList = gson.fromJson(json, DataList.class);
            fetchLog = dataList.getDataList();
        }
Hossin Asaadi
  • 367
  • 6
  • 13