在哪里使用Gson和SharedPreferences保存对象的Arraylist,以便在按下后退按钮时Arraylist的数据完好无损

时间:2014-01-03 05:09:57

标签: android arraylist sharedpreferences gson

在我的应用程序中,我尝试使用SharedPreference和Gson jar文件保存ArrayList。 Arraylist具有Person类的对象,它实现了Serializable。我希望ArrayList在按下后退按钮时保留其数据。我在Internet上看到了很多代码但是没有什么特别适合我。我已经编写了部分代码,看到了各种解决方案,但我不确定在哪里使用它,我的代码也需要一些修正,但我无法做到,因为我没有太多的编程经验。

以下是我的代码的一部分:

//保存arraylist

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
    Editor editor = prefs.edit();
    Gson gson = new Gson();
    //String json = gson.toJson(RecipientArray);
    for(Person p:RecipientArray){
        String json = gson.toJson(p);
        editor.putString("RecList", json);
    }

    editor.commit();

//检索值

SharedPreferences prefs =    PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
    String json = prefs.getString("RecList", "");
    Gson gson = new Gson();
    Person p = gson.fromJson(json, Person.class);
    RecipientArray.add(p); //RecipientArray is an ArrayList<Person>

这里我不确定如何获取之前保存的所有Person对象。此外,我不知道在哪里放这些代码。请尽快帮助我。

感谢。

1 个答案:

答案 0 :(得分:3)

这段代码有问题,因为你只放了一个键“RecList”,这样你就可以把最后一个Person p放到SharedPreferences上。

   SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
        Editor editor = prefs.edit();
        Gson gson = new Gson();
        //String json = gson.toJson(RecipientArray);
        for(Person p:RecipientArray){
            String json = gson.toJson(p);
            editor.putString("RecList", json);
        }
    editor.commit();

也许您可以更改“RecList _”+数字等密钥,并保存array.size

   SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
        Editor editor = prefs.edit();
        Gson gson = new Gson();
        //String json = gson.toJson(RecipientArray);
        for(int i = 0; i < RecipientArray.size(); i++)
            String json = gson.toJson(RecipientArray.get(i));
            editor.putString("RecList_"+i, json);
            editor.putInt("size",i);
        }
    editor.commit();

因此您可以像这样获取SharedPreferences中的所有字符串

SharedPreferences prefs =    PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
int size = prefs.getInt("size");
for(int i = 0;i<size;i++) {
    String json = prefs.getString("RecList_"+i, "");
    Gson gson = new Gson();
    Person p = gson.fromJson(json, Person.class);
    RecipientArray.add(p); //RecipientArray is an ArrayList<Person>
}