Подтвердить что ты не робот

Сохранение списка объектов Serializable в sharedPreferences

Может ли кто-нибудь сказать мне, как я могу сохранить список пользовательских Serializable объектов в SharedPreference? Я новичок в Android, и я хочу сохранить ArrayList<Contact> list в общих настройках.

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



}
4b9b3361

Ответ 1

Вы можете использовать формат JSON для сериализации ArrayList и содержащихся в нем объектов, а затем сохранить результат String в SharedPreferences.

Если вы хотите вернуть данные, извлеките String и используйте JSONArray для извлечения каждого объекта и добавления его в новый ArrayList.

В противном случае вы можете просто использовать классы Object(Input/Output)Stream и записать его в другой файл, используя (для записи)

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

Ответ 2

Другим хорошим решением является использование GSON. Вот пример:

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

Дополнительная информация о gson на http://code.google.com/p/google-gson/

Довольно просто?;)
Будьте осторожны

Ответ 3

Самый простой выход?

Преобразуйте в JSON и сохраните его как String.

Ответ 4

Если он уже сериализовался, то вы можете просто вставить его. принятый ответ в этом сообщении укажет вам в сторону: Сохранить ArrayList в SharedPreferences