2013-02-05 64 views
17

谁能告诉我如何将自定义的Serializable对象列表保存到SharedPreference?我是Android新手,我想将ArrayList<Contact> list保存到共享偏好设置中。将可序列化的对象列表保存到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; 
    } 



} 

回答

7

可以使用JSON格式序列化您的ArrayList和对象包含,然后String结果存储到SharedPreferences

当您想要取回数据时,请检索字符串并使用JSONArray来检索每个对象并将其添加到新的ArrayList。

否则,你可以简单地使用Object(Input/Output)Stream类,并用它编写成differente文件(写)

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

最简单的办法呢?

转换为JSON并将其另存为String

33

另外一个很好的解决方案是使用GSON。这里有一个例子:在http://code.google.com/p/google-gson/

很简单说得对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; 
} 

的更多信息? ;)
小心