如何在 android 中从 Gson 存储和检索对象?
How to store and retrieve an object from Gson in android?
在我的activity中,用户有一组他挑选的图像,然后我想将它们存储在首选项中。然后用户离开 activity,然后回来,我希望那些图像仍然加载到 ImageView。我正在尝试使用 Gson 来完成此操作,但遇到了麻烦,看不出我做错了什么。
希望外部洞察力可以帮助我得到这个我只是没有看到的明显答案。
谢谢。
到目前为止,这是我的代码。
private void savePreferencesForImages(String key, ArrayList<Image> imageList)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String json = gson.toJson(imageList);
editor.putString(key,json);
editor.commit();
}
//Storing Local data.
private void loadPreferences()
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
String gsonString = sharedPreferences.getString("userImages", "");
ArrayList<Image> images = gson.fromJson(gsonString, Image.class);//Ask Whosebug tomorrow.
}
在检索数据的部分,您将需要一种将字符串反序列化为图像列表的类型...
喜欢:
private void loadPreferences()
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
Type type = new TypeToken<List<Image>>() {}.getType();
String gsonString = sharedPreferences.getString("userImages", "");
List<Image> images = gson.fromJson(gsonString, type);
}
您可以做的一件事是单独保存图像,然后在检索时将它们加载到 ArrayList 中。
private void savePreferencesForImages(ArrayList<Image> imageList)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
int imgKey = 0;
for (Image img: imageList) {
String json = gson.toJson(imageList);
editor.putString("" + imgKey,json);
editor.commit();
imgKey++;
}
}
private ArrayList<Image> loadPreferences()
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
Map<String, ?> allPrefs = sharedPreferences.getAll();
String gsonString = sharedPreferences.getString("userImages", "");
ArrayList<Image> images = new ArrayList<Image>();
if (!allPrefs.isEmpty()) {
for (Map.Entry<String, ?> entry : allPrefs.entrySet()) {
String json = entry.getValue().toString();
Image temp = gson.fromJson(json, Image.class);
images.add(temp);
}
}
return images;
}
这可能是最复杂的解决方法,但这是我首先想到的。您也可以制作自己的 ImageManager class 或其他东西,并使用 getImage(key) 方法等模拟 ArrayList 的行为。这将消除尝试保存 ArrayList 时带来的复杂性。
在我的activity中,用户有一组他挑选的图像,然后我想将它们存储在首选项中。然后用户离开 activity,然后回来,我希望那些图像仍然加载到 ImageView。我正在尝试使用 Gson 来完成此操作,但遇到了麻烦,看不出我做错了什么。 希望外部洞察力可以帮助我得到这个我只是没有看到的明显答案。
谢谢。
到目前为止,这是我的代码。
private void savePreferencesForImages(String key, ArrayList<Image> imageList)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String json = gson.toJson(imageList);
editor.putString(key,json);
editor.commit();
}
//Storing Local data.
private void loadPreferences()
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
String gsonString = sharedPreferences.getString("userImages", "");
ArrayList<Image> images = gson.fromJson(gsonString, Image.class);//Ask Whosebug tomorrow.
}
在检索数据的部分,您将需要一种将字符串反序列化为图像列表的类型...
喜欢:
private void loadPreferences()
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
Type type = new TypeToken<List<Image>>() {}.getType();
String gsonString = sharedPreferences.getString("userImages", "");
List<Image> images = gson.fromJson(gsonString, type);
}
您可以做的一件事是单独保存图像,然后在检索时将它们加载到 ArrayList 中。
private void savePreferencesForImages(ArrayList<Image> imageList)
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
int imgKey = 0;
for (Image img: imageList) {
String json = gson.toJson(imageList);
editor.putString("" + imgKey,json);
editor.commit();
imgKey++;
}
}
private ArrayList<Image> loadPreferences()
{
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
Gson gson = new Gson();
Map<String, ?> allPrefs = sharedPreferences.getAll();
String gsonString = sharedPreferences.getString("userImages", "");
ArrayList<Image> images = new ArrayList<Image>();
if (!allPrefs.isEmpty()) {
for (Map.Entry<String, ?> entry : allPrefs.entrySet()) {
String json = entry.getValue().toString();
Image temp = gson.fromJson(json, Image.class);
images.add(temp);
}
}
return images;
}
这可能是最复杂的解决方法,但这是我首先想到的。您也可以制作自己的 ImageManager class 或其他东西,并使用 getImage(key) 方法等模拟 ArrayList 的行为。这将消除尝试保存 ArrayList 时带来的复杂性。