Android SharedReferences设置/检索复选框,带有HashMap/For each循环
我正在保存复选框文本,Android SharedReferences设置/检索复选框,带有HashMap/For each循环,android,foreach,hashmap,sharedpreferences,Android,Foreach,Hashmap,Sharedpreferences,我正在保存复选框文本,isChecked到SharedReferences中,为每个循环使用获取复选框值,并使用HashMap存储所有值 我保存复选框文本并选中的代码: HashMap<String,Object> amenityMap = new HashMap<>(); for(CheckBox checkBox : checkBoxes){ if(checkBox.isChecked()){ amenityMap.p
isChecked
到SharedReferences
中,为每个循环使用获取复选框值,并使用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);
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()));
HashMap-amentitymap=newhashmap();
用于(复选框:复选框){
如果(checkBox.isChecked()){
修正映射put(checkBox.getText().toString().trim(),true);
}
}
SaveHashMapSharedReferences(家长活动、礼仪地图、礼仪.礼仪详情、礼仪.礼仪详情);
共享参考的方法:
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();
}
公共静态void saveHashMapSharedReferences(活动父活动、HashMap修正映射、字符串spType、字符串键){
SharedReferences AppSharedReferences=parentActivity.GetSharedReferences(spType,Context.MODE\u PRIVATE);
SharedReferences.Editor prefsEditor=AppSharedRefers.edit();
Gson Gson=新的Gson();
字符串json=gson.toJson(amentitymap);//tasks是ArrayList实例变量
putString(key,json);
prefsEditor.apply();
}
下图是保存在SharedReferences.xml中的复选框值:
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);
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()));
所以它的键是amendityDetails
,复选框的值都在那里
如何从这个SharedReference中检索复选框值并设置回复选框 首先,您的HashMap
应该是HashMap
。
要恢复,还可以使用Gson
再次将保存的数据解析到HashMap
,并使用已恢复的HashMap
恢复复选框的状态
Type collectionType = new TypeToken<HashMap<String, boolean>>(){}.getType();
HashMap<String, boolean> hashMap = gson.fromJson(appSharedPrefs.getString(key,""), collectionType);
Type collectionType=new-TypeToken(){}.getType();
HashMap HashMap=gson.fromJson(appSharedPrefs.getString(键“”),collectionType);
首先更改如下:
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);
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()));
HashMap-amentitymap=newhashmap()代码>
到
HashMap-amentitymap=newhashmap()代码>
按如下方式更改每个循环的设置:
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);
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()));
然后可以按如下方式检索值:
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);
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()));
我使用checkBoxObj.setChecked(storedAmenityMap.get(checkBoxObj.getText())上的“java.lang.NullPointerException:cannot unbox null value”检索错误@TommyChong确保您已将数据正确存储在共享首选项中谢谢兄弟,我想我明白您的意思了哈哈,很好的编码和解决方案。我已经解决了。@TommyChong没问题。享受编码:-)