【问题标题】:Save hashmap in SharedPreferences [duplicate]在 SharedPreferences 中保存哈希图 [重复]
【发布时间】:2021-11-21 19:45:45
【问题描述】:

我需要将此哈希图保存在 SharedPreferences 中,我尝试将其转换为 Json,但没有成功

 Map<String, String> userMap = new HashMap<String , String>() {{
                for(int i = 0; i < userList.size(); i++ ) {
                    String id= userList.get(i).getId();
                    String name = userList.get(i).getName();
                    put(id, name);

                }
            }};
            Gson gson = new Gson();
            String jsonString = gson.toJson(userMap);
            SessionManager sessionManager=new SessionManager(LoginActivity.this);
            sessionManager.saveMap(jsonString); 

jsonString 正在返回 null,即使 usermap 有数据 我真的需要这个来推进我的工作,感谢任何帮助。

【问题讨论】:

    标签: java android sharedpreferences


    【解决方案1】:

    Gson 无法识别以这种方式执行的匿名类。

    尝试在不使用{{}} 构造的情况下初始化地图。 例如

    Map<String, String> userMap = new HashMap<String , String>();
    
    for(int i = 0; i < userList.size(); i++ ) {
        String id= userList.get(i).getId();
        String name = userList.get(i).getName();
        put(id, name);
    }
    
    Gson gson = new Gson();
    String jsonString = gson.toJson(userMap);
    SessionManager sessionManager=new SessionManager(LoginActivity.this);
    sessionManager.saveMap(jsonString); 
    

    要将此 json 转换回Map&lt;String, String&gt;,您可以按照建议的here 使用TypeToken

    Gson gson = new Gson();
    Type type = new TypeToken<Map<String, String>>() {}.getType();
    Map<String, String> nameEmployeeMap = gson.fromJson(jsonString, type);
    

    【讨论】:

    • 谢谢兄弟,它可以工作,但是在我检索到 json 字符串后你知道如何将其转换回 hashmap
    • 是的,您必须使用TypeToken 以类型安全的方式将其取回。注意,如果底层 json 不符合这种类型的令牌,它会引发异常。我想在你的情况下它总是会这样。
    猜你喜欢
    • 2017-01-05
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    相关资源
    最近更新 更多