首页 > 解决方案 > 如何将地图保存到共享首选项?

问题描述

我有一个Map<Integer, User>自定义值。每个用户都包含各种字符串和数字。我可以保存单个用户,但很难保证整个地图的安全。(我通过使用 SharedPreferences 以这种方式保存了许多其他对象,但我不知道如何以这种方式保存我的整个 Map。这可能吗?也许 SharedPreferences 不是解决这个问题的方法吗?有没有更简单的方法方法?)

共享偏好类:

地图

public void saveUserMap(Map<Integer, User> userMap){
        SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt("userID", userMap.get(userMap).getUserID());
        editor.putString("firstName", userMap.get(userMap).getFirstName());
        editor.putString("userName", userMap.get(userMap).getUserName());
        editor.putString("birthDate", userMap.get(userMap).getBirthDate());
        editor.putString("gender", userMap.get(userMap).getGender());
        editor.putString("country", userMap.get(userMap).getCountry());
        editor.putString("aboutmeText", userMap.get(userMap).getAboutmeText());
        editor.putString("status", userMap.get(userMap).getStatus());

        editor.apply();
    }

单用户:

public void saveUser(User user){
        SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt("userID", user.getUserID());
        editor.putString("firstName", user.getFirstName());
        editor.putString("userName", user.getUserName());
        editor.putString("birthDate", user.getBirthDate());
        editor.putString("gender", userMap.get(userMap).getGender());
        editor.putString("country", user.getCountry());
        editor.putString("aboutmeText", user.getAboutmeText());
        editor.putString("status", user.getStatus());
       
        editor.apply();
}

可以保存单个用户:

SharedPrefManager.getInstance(TestRequest.this)
                            .saveUser(standardResponse.getUser().get(0));

保存用户地图崩溃:

SharedPrefManager.getInstance(TestRequest.this)
                            .saveUserMap(standardResponse.getUser());

在此处输入图像描述

标签: javaandroidsharedpreferences

解决方案


您可以将用户对象序列化为 json(使用 GSON 或 Moshi)并将 JSON 保存到共享首选项中。

public void saveUserMap(User user){
        SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putString("mUser", new Gson().toJson(user));

        editor.apply();
    }

保存对象的其他选项是许多用于 Android 的 ORM(ORMLite、greenDAO、Sugar ORM、ActiveAndroid 等)


推荐阅读