繁体   English   中英

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

[英]How to save and retrieve an arraylist of strings with the same order, using shared preferences

我是Android的新手,我尝试完成我的第一个android应用程序。 我有一个字符串数组列表(我已经适应了一个列表视图),并通过按不同的按钮添加了不同的字符串。 问题是,当应用程序关闭时,arraylist会丢失所有数据,并且我已经阅读到sharedpreferences类可以解决此问题。我尝试过,然后又取回了arraylist,但是顺序与我之前的顺序不同保存了。 那么,我如何以相同的顺序检索arraylist? 提前致谢!

如果您真的想使用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>

简单的将arraylist保存在sharedpreferences中的方法是,将其以相同的顺序转换为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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM