如何在 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 时带来的复杂性。