将LinkedHashMap变量保存到android中的共享首选项中

时间:2014-05-15 07:10:00

标签: android sharedpreferences

我遇到了一个问题,我想在共享首选项中保存linkedhashmap变量,我的代码就在这里..

public static LinkedHashMap<String, AppVariable> GlobalAppVariables;

if (Constants.DEVICE_ID == 0) {
String accounts_service = serverSync.getCentralServer(this,serial_number);
   if (accounts_service != null){
        Constants.MACHINE_CENTRAL_SERVER = accounts_service;
        }
       Constants.REGISTER_DEVICE_SERVICE = String.format("%sCommon/RegisterMachine", Constants.MACHINE_CENTRAL_SERVER); 
       GlobalAppVariables = serverSync.registerDevice(this, serial_number);       
} 

        SharedPreferences sharedPref= getSharedPreferences("mypref", 0);    
    SharedPreferences.Editor editor= sharedPref.edit();
    editor.putString("name", GlobalAppVariables.toString());
    editor.commit();     

    SharedPreferences sharedPref1= getSharedPreferences("mypref", 0);
    LinkedHashMap<String, AppVariable> reqVariables= sharedPref1.getString("name", "");

现在我的问题是我想在共享首选项中保存globalappvariables并使用相同的变量,即当wifi不可用时reqVariables因为只有当net可用时才能使用globalappvariables,即

    GlobalAppVariables = serverSync.registerDevice(this, serial_number);    

当我构建上面的代码时,我遇到了问题

The method putString(String, String) in the type SharedPreferences.Editor is not applicable for the arguments (String, LinkedHashMap<String,AppVariable>)   

所以请建议我如何保存appvariables。希望这个问题是可以理解的。提前谢谢。

4 个答案:

答案 0 :(得分:0)

你无法将HashMap保存到android中的SharedPreferences中。 所以我认为你可以通过一个技巧来做到这一点,例如:你将把hashmap的所有键保存为String []&amp;所有值都为String []

答案 1 :(得分:0)

将你的地图放入列表:

例如:

LinkedHashMap < String, String > map
List < String > keyList;
List < String > valueList;

map.keySet();
map.values();
List<String> keyList = new ArrayList<String>(map.keySet());
List<String> valueList = new ArrayList<String>(map.values());

从你的列表中获取数组:

 String[] MyArr = new String[My_list.size()];
 MyArr = My_list.toArray(MyArr);

然后将数组保存到ur sharedpreferences中。

保存数组:

public boolean saveArray(String[] array, String arrayName, Context mContext) {   
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    SharedPreferences.Editor editor = prefs.edit();  
    editor.putInt(arrayName +"_size", array.length);  
    for(int i=0;i<array.length;i++)  
        editor.putString(arrayName + "_" + i, array[i]);  
    return editor.commit();  
} 

加载数组:

public String[] loadArray(String arrayName, Context mContext) {  
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(arrayName + "_size", 0);  
    String array[] = new String[size];  
    for(int i=0;i<size;i++)  
        array[i] = prefs.getString(arrayName + "_" + i, null);  
    return array;  
}

答案 2 :(得分:0)

// Try this way,hope this will help you to solve your problem...

        HashMap<String,String> map = new HashMap<String, String>();
        map.put("name","ANC");
        map.put("address","XYZ");
        map.put("age","20");
        map.put("phone","123456");


        // Set SharedPreferences
        SharedPreferences sharedPref= getSharedPreferences("mypref", 0);
        String keys="";
        Iterator<String> itr = map.keySet().iterator();
        while (itr.hasNext()) {
            String key = itr.next();
            SharedPreferences.Editor editor= sharedPref.edit();
            editor.putString(key,map.get(key));
            editor.commit();
            keys += itr.next()+",";
        }
        keys = keys.substring(0,keys.length()-1);
        SharedPreferences.Editor editor= sharedPref.edit();
        editor.putString("keys",keys);
        editor.commit();

        // Get SharedPreferences
        SharedPreferences sharedPref= getSharedPreferences("mypref", 0);
        String[] keysArray = sharedPref.getString("keys","").split(",");
        for (int i=0;i<keysArray.length;i++){
            System.out.println("Key : "+keysArray[i]+" Value : "+sharedPref.getString(keysArray[i],""));
        }

答案 3 :(得分:0)

如果您不想编写很多代码,请直接下载Gson。 这是草图:

private Type entityType = new TypeToken<LinkedHashMap<String, AppVariable>>(){}.getType();

private void save(LinkedHashMap<String, AppVariable> map){
    Gson gson = new Gson();
    String data = gson.toJson(map, entityType);

    getSharedPreferences("mypref", 0)
    .edit()
    .putString("name", data)
    .commit();
}

private LinkedHashMap<String, AppVariable> load(){
    Gson gson = new Gson();
    String data = getSharedPreferences("mypref", 0).getString("name", "");

    return gson.fromJson(data, entityType);
}