java - 如何将地图保存到共享首选项?
问题描述
我有一个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());
解决方案
您可以将用户对象序列化为 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 等)
推荐阅读
- wordpress - htaccess wordpress中的重定向问题
- javascript - 如何使用 Python 拆分 Javascript 代码(bs4)
- azure-active-directory - AADSTS700016:在目录“some_another_id”中找不到标识符为“some_id”的应用程序
- python - 我正在运行一个程序通过两个套接字发送图片,我没有错误,但程序卡住了
- javascript - 单击laravel中的下拉标签后隐藏回声
- laravel - 我想集成一个 laravel 广播来实时更新一个 html 属性
- c# - c# FromBase64String() 返回异常:输入在某些 IOS 设备(如 IPHONE 6s)上不是有效的 base64
- android - 如何检查 mockito 是否已模拟函数并返回 when.ThenReturn 中提到的
- xml - 如何使用 XSLT 3.0 从命令行解析 XML 文件中的 XInclude 指令
- windows - 进程在远程计算机上由 PowerShell 启动时不显示托盘图标