我试图保存一个对象的ColorBean
类,当应用程序去onStop()
public class MainActivity extends ExpandableListActivity {
private ColorAdapter expListAdapter;
LinkedHashMap<String, ArrayList<ColorBean>> colorsMap2 = new LinkedHashMap<String, ArrayList<ColorBean>>();
SharedPreferences prefs;
static String fileName = "SharedObject";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
ArrayList<String> groupNames = new ArrayList<String>();
prefs = getPreferences(MODE_PRIVATE);
final LinkedHashMap<String, ArrayList<ColorBean>> colorsMap = new LinkedHashMap<String, ArrayList<ColorBean>>();
ArrayList<ColorBean> color = new ArrayList<ColorBean>();
//Trying to fetch the prefs
colorsMap2 = (LinkedHashMap<String, ArrayList<ColorBean>>) loadFromSharedPrefs();
if (colorsMap2 == null || colorsMap2.size() == 0)
Toast.makeText(this, "Not Retrieved", Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
//fetching them here too
if (loadFromSharedPrefs() != null) {
colorsMap2 = (LinkedHashMap<String, ArrayList<ColorBean>>) loadFromSharedPrefs();
}
}
@Override
protected void onStop() {
super.onStop();
//saving the preferences
saveToSharedPrefs(colorsMap2);
}
public void saveToSharedPrefs(Object objToSave) {
SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(objToSave);
editor.putString("MyObject", json);
editor.commit();
}
public Object loadFromSharedPrefs() {
Toast.makeText(this, "loading", Toast.LENGTH_SHORT).show();
Gson gson = new Gson();
Object obj = null;
if (prefs != null) {
String json = prefs.getString("MyObject", "");
obj = gson.fromJson(json, Object.class);
}
return obj;
}
}
看起来您需要更改行:
obj = gson.fromJson(json, Object.class);
:
obj = gson.fromJson(json, LinkedHashMap<String, ArrayList<ColorBean>>.class);
对不起,我已经有一段时间没有使用Gson了,是的,你是对的,我上面说的不起作用。在序列化类型时需要存储泛型类型信息,因此在序列化和反序列化时需要使用Gson的TypeToken
类:
Type mapType = new TypeToken<LinkedHashMap<String, ArrayList<ColorBean>>>(){}.getType();
然后使用:
序列化String json = gson.toJson(objToSave, mapType);
和反序列化使用:
obj = gson.fromJson(json, mapType);
这里有一个教程,介绍使用通用类型的Gson