Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SharedReferences设置/检索复选框,带有HashMap/For each循环_Android_Foreach_Hashmap_Sharedpreferences - Fatal编程技术网

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没问题。享受编码:-)