学无先后,达者为师

网站首页 编程语言 正文

SharedPreferences存储HashMap和相互转化

作者:Pigerrrr 更新时间: 2022-09-26 编程语言
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private HashMap<String,PeopleBean> map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button save_value = findViewById(R.id.save_value);
        Button change_value = findViewById(R.id.change_value);
        Button take_value = findViewById(R.id.take_value);

        save_value.setOnClickListener(this);
        change_value.setOnClickListener(this);
        take_value.setOnClickListener(this);

        //将hashmap存储,比如用sp来存储
        map = new HashMap<>();
        PeopleBean peopleBean1 = new PeopleBean("小明",19);
        PeopleBean peopleBean2 = new PeopleBean("小红",18);
        PeopleBean peopleBean3 = new PeopleBean("小张",18);

        map.put("key1",peopleBean1);
        map.put("key2",peopleBean2);
        map.put("key3",peopleBean3);

    }

    //将 HashMap 用sp存储起来
    private void saveHashMap(HashMap<String,PeopleBean> map){

        Gson gson = new Gson();
        String json = gson.toJson(map);

        //步骤1:创建一个SharedPreferences对象
        SharedPreferences sharedPreferences= getSharedPreferences("config", Context.MODE_PRIVATE);
        //步骤2: 实例化SharedPreferences.Editor对象
        SharedPreferences.Editor editor = sharedPreferences.edit();
        //步骤3:将获取过来的值放入文件
        editor.putString("config",json);
        editor.commit();


    }


    //将json格式的字符串从sp中取出来转化为hashMap
    private HashMap<String,PeopleBean> getHashMap(){

        SharedPreferences sharedPreferences= getSharedPreferences("config", Context .MODE_PRIVATE);
        String json =sharedPreferences.getString("config","");
        HashMap<String,PeopleBean> map;

        Type type = new TypeToken<HashMap<String, PeopleBean>>(){}.getType();
        Gson gson = new Gson();
        map = gson.fromJson(json, type);

        return map;
    }

    //改变其中一个值:比如 改变年龄
    private void changeValue(String name,int age){
        HashMap<String, PeopleBean> hashMap = getHashMap();
        Collection<PeopleBean> values = hashMap.values();
        for (PeopleBean bean : values) {
            if (TextUtils.equals(bean.getName(),name)){
                bean.setAge(age);
            }
        }
        saveHashMap(hashMap);
    };


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.save_value:
                saveHashMap(map);
                break;
            case R.id.change_value:
                changeValue("小明",30);

                break;
            case R.id.take_value:
                HashMap<String, PeopleBean> hashMap = getHashMap();
                break;
            default:
                break;

        }
    }
}

原文链接:https://blog.csdn.net/TianciZhu/article/details/107525041

栏目分类
最近更新