如何使用共享首选项保存和检索具有相同顺序的字符串的arraylist

时间:2017-10-09 16:46:41

标签: java android arraylist

我是Android新手,我尝试完成我的第一个Android应用程序。我有一个字符串的arraylist(我已经适应了listview),我按下不同的按钮添加不同的字符串。问题是,当应用程序关闭时,arraylist会丢失所有数据,并且我已经读过sharedpreferences类可以解决这个问题。我试过了,我检索了arraylist,但没有和我当时的顺序相同救了它。那么,我如何以相同的顺序检索arraylist? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果您真的对使用SharedPreferences而不是数据库这样做感兴趣,可以尝试使用它们在数组上的位置来保存字符串作为首选项文件中的键。

您可以使用下面的代码段实现这一目标:

private String prefName = "preferences";


/**
* Save the arraylist of Strings in a preferences file.
*/
public void saveArray(Context context, ArrayList<String> myArray) {
    SharedPreferences sharedPref = context.getSharedPreferences(prefName,Context.MODE_PRIVATE);
    Editor editor = sharedPref.edit();

    for (int i = 0; i < myArray.size(); i++) {
        editor.putString(String.valueOf(i), myArray.get(i));
    }

    editor.commit();
}

/**
* Reads the saved contents in order.
*/
public ArrayList<String> readArray(Context context) {
    SharedPreferences sharedPref = context.getSharedPreferences(prefName,Context.MODE_PRIVATE);
    Editor editor = sharedPref.edit();

    int size = sharedPref.getAll().size();
    ArrayList<String> ret = new ArrayList<>();

    for (int i = 0; i < myArray.size(); i++) {
        ret.add(i,sharedPref.getString(String.valueOf(i)));
    }

    return ret;
}

首选项文件应如下所示:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
    <string name="0">My String</string>
    <string name="1">My second String</string>
</map>

答案 1 :(得分:1)

EASIEST 在共享偏好中保存arraylist的方法是将其转换为JSON,并在获得时以相同的顺序将其转换为100%

String list = new Gson().toJson(your_list);
shared.putString("KEY", list).apply();

然后,将其转换回来

List<Object> list = new Gson().fromJson(jsonString, new TypeToken<ArraList<Object>>(){}.getType());