Android SharedPreferences设置/检索带有HashMap的复选框/对于每个循环

时间:2018-07-10 02:37:44

标签: android foreach hashmap sharedpreferences

我使用isChecked获取复选框的值并将SharedPreferencesfor each loop保存到HashMap,并使用 HashMap<String,Object> amenityMap = new HashMap<>(); for(CheckBox checkBox : checkBoxes){ if(checkBox.isChecked()){ amenityMap.put(checkBox.getText().toString().trim(),true); } } saveHashMapSharedPreferences(parentActivity, amenityMap, Amenity.AMENITY_DETAILS,Amenity.AMENITY_DETAILS); 存储了所有值。

我用于保存复选框文本和isChecked的代码:

public static void saveHashMapSharedPreferences(Activity parentActivity,HashMap<String,Object> amenityMap,String spType, String key) {
    SharedPreferences appSharedPrefs = parentActivity.getSharedPreferences(spType, Context.MODE_PRIVATE);

    SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();

    Gson gson = new Gson();
    String json = gson.toJson(amenityMap); //tasks is an ArrayList instance variable
    prefsEditor.putString(key, json);
    prefsEditor.apply();
}

SharedPreference的方法:

amenityDetails

下面的图片是保存在SharedPreferences .xml中的复选框值:

enter image description here

因此它的localField,复选框的值都在这里。

如何从此SharedPreference中检索复选框值并将其设置回isChecked的复选框?

2 个答案:

答案 0 :(得分:1)

首先进行以​​下更改:

HashMap<String,Boolean> amenityMap = new HashMap<>();

for(CheckBox checkBox : checkBoxes){ amenityMap.put(checkBox.getText().toString().trim(),checkBox.isChecked()); }

为每个循环更改您的内容,如下所示:

SharedPreferences appSharedPrefs = parentActivity.getSharedPreferences(spType, Context.MODE_PRIVATE);
Type type = new TypeToken<Map<String, Boolean>>(){}.getType();
Map<String, Boolean> storedAmenityMap = gson.fromJson(appSharedPrefs.getString(key,""), type);

然后您可以按以下方式检索值:

checkBoxObj.setChecked(storedAmenityMap.get(checkBoxObj.getText()));

然后,每当要设置复选框状态时:

ObjectId

答案 1 :(得分:0)

首先,您的HashMap应该是HashMap<String, boolean>。 要恢复,您还可以使用Gson再次将保存的数据解析到HashMap,然后使用恢复的HashMap恢复CheckBox状态

Type collectionType = new TypeToken<HashMap<String, boolean>>(){}.getType();
HashMap<String, boolean> hashMap = gson.fromJson(appSharedPrefs.getString(key,""), collectionType);