有谁能告诉我如何将自定义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;
}
}
答案 0 :(得分:33)
另一个好的解决方案是使用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/的更多信息
很简单吧? ;)
小心
答案 1 :(得分:7)
您可以使用 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 :(得分:3)
最简单的出路?
转换为JSON
并将其另存为String
。
答案 3 :(得分:1)
如果它已经序列化,那么你可以把它放进去。这篇文章中接受的答案会指出你的方向:Save ArrayList to SharedPreferences
答案 4 :(得分:0)
尝试一下,为我工作:
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();
}