我想将hashmap存储到我的android应用程序中,重启时会显示最后保存的hashmap值。
HashMap<Integer,String> HtKpi=new HashMap<Integer,String>();
是我的hashmap,44个值动态存储在其中。这工作正常! 现在,我想存储它以备将来使用(应用程序重启或重用)。
答案 0 :(得分:23)
您可以将其序列化为json并将结果字符串存储在首选项中。然后,当应用程序重新启动时,从首选项中获取字符串并对其进行反序列化。
编辑:
为此,您可以使用Google Gson为例。
您需要将地图包装在一个类中:
public class MapWrapper {
private HashMap<Integer, String> myMap;
// getter and setter for 'myMap'
}
存储地图:
Gson gson = new Gson();
MapWrapper wrapper = new MapWrapper();
wrapper.setMyMap(HtKpi);
String serializedMap = gson.toJson(wrapper);
// add 'serializedMap' to preferences
要检索地图:
String wrapperStr = preferences.getString(yourKey);
MapWrapper wrapper = gson.fromJson(wrapperStr, MapWrapper.class);
HashMap<Integer, String> HtKpi = wrapper.getMyMap();
答案 1 :(得分:4)
将其序列化并将其保存在共享首选项或文件中。当然,您是否可以这样做取决于从哪里映射的数据类型。 (例如,如果您尝试序列化视图,则无法使用。)
示例:
//persist
HashMap<String, Integer> counters; //the hashmap you want to save
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
for (String s : counters.keySet()) {
editor.putInteger(s, counters.get(s));
}
editor.commit();
//load
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
HashMap<String, Integer> map= (HashMap<String, Integer>) pref.getAll();
for (String s : map.keySet()) {
Integer value=map.get(s);
//Use Value
}
答案 2 :(得分:4)
使用Raghav我创建了一个完整的工作示例:
public class AppCache {
public static HashMap<String, String> hashMap = null;
/* REPOSITORY NAME */
public static final String REPOSITORY_NAME = "HMIAndroid_System_Settings";
/* SETTINGS */
public static final String SETTING_PLANNED = "DATA_PLANNED";
public static final String SETTING_ACTUAL = "DATA_ACTUAL";
public static final String SETTING_ETA = "DATA_ETA";
public static final String SETTING_OR = "DATA_OR";
public static final String SETTING_LINEID = "LINEID";
public static final String SETTING_SERVERIP = "SERVERIP";
public static void LoadSettings(Context context) {
SharedPreferences pref = context.getSharedPreferences(REPOSITORY_NAME, Context.MODE_PRIVATE);
hashMap = (HashMap<String, String>) pref.getAll();
if(hashMap == null) {
hashMap = new HashMap<String, String>();
}
}
public static void SaveSettings(Context context) {
if(hashMap == null) {
hashMap = new HashMap<String, String>();
}
//persist
SharedPreferences pref = context.getSharedPreferences(REPOSITORY_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
for (String s : hashMap.keySet()) {
editor.putString(s, hashMap.get(s));
}
editor.commit();
}
}
然后在你的onCreate加载它:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//load settings
AppCache.LoadSettings(getApplicationContext());
Log.d("onCreate","My LineID=" + AppCache.hashMap.get(AppCache.SETTING_LINEID));
Log.d("onCreate","Dest ServerIP=" + AppCache.hashMap.get(AppCache.SETTING_SERVERIP));
}
随时在您的应用更新设置中的任何位置:
AppCache.hashMap.put(AppCache.SETTING_LINEID, "1");
AppCache.hashMap.put(AppCache.SETTING_SERVERIP, "192.168.1.10");
在你的onDestroy保存设置中进行缓存:
@Override
protected void onDestroy() {
//save settings
AppCache.SaveSettings(getApplicationContext());
}
答案 3 :(得分:0)
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
}
你可以把它存放在这里...... 在活动被杀死之前调用此方法,以便在将来某个时间返回时可以恢复其状态。
然后你可以从这里退回来,,,
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
}
当从以前保存的状态重新初始化活动时,在onStart()之后调用此方法,此处在savedInstanceState中给出...
我认为这会有所帮助
答案 4 :(得分:0)
我有一个解决方案。我在我的应用程序中做了同样的事情,我想将状态名称作为键和状态缩写存储为值。为此在“res / values / string.xml”中声明了一个字符串数组。以下是用于声明数组的代码:
<string-array name="array_string">
<item>yourKey1;yourValue1</item>
<item>yourKey2;yourValue2</item>
<item>yourKey3;yourValue3</item>
</string-array>
在此之后,您想要实例化您的hashmap,请执行以下操作:
HashMap<String, String> map = new HashMap<String, String>();
Resources res = getResources();
String[] stringArray = res.getStringArray(R.array.array_string);
//R.array.array_string is the name of your array declared in string.xml
if(stringArray == null || stringArray.length == 0) return;
for(String string : stringArray) {
String[] splittedString = string.split(";");
if(splittedString.length > 0) {
String key = splittedString[0];
String value = splittedString[1];
map.put(key, value);
}
}
现在您已准备好使用HaspMap实例。这是我喜欢这样做的简单方法。