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

Java 如何使用共享首选项以相同顺序保存和检索字符串的arraylist,java,android,arraylist,Java,Android,Arraylist,我是Android新手,我试图完成我的第一个Android应用程序。我有一个字符串的arraylist(我已经将其改编成listview),我通过按不同的按钮添加不同的字符串。问题是,当应用程序关闭时,arraylist会丢失所有数据,我读到SharedReferences类可以解决这个问题。我尝试了这个方法,并重新检索了arraylist,但检索顺序与保存时不同。那么,如何以相同的顺序检索arraylist? 提前谢谢 如果您真的对使用SharedReferences而不是数据库来保存字符串感

我是Android新手,我试图完成我的第一个Android应用程序。我有一个字符串的arraylist(我已经将其改编成listview),我通过按不同的按钮添加不同的字符串。问题是,当应用程序关闭时,arraylist会丢失所有数据,我读到SharedReferences类可以解决这个问题。我尝试了这个方法,并重新检索了arraylist,但检索顺序与保存时不同。那么,如何以相同的顺序检索arraylist?
提前谢谢

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

您可以通过以下代码片段实现这一点:

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;
}
私有字符串prefName=“首选项”;
/**
*将字符串的arraylist保存在首选项文件中。
*/
公共void saveArray(上下文上下文,ArrayList myArray){
SharedReferences SharedReferences=context.getSharedReferences(prefName,context.MODE\u PRIVATE);
Editor-Editor=sharedPref.edit();
对于(int i=0;i
首选项文件应如下所示:

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

我的绳子
我的第二根弦

在SharedReferences中保存arraylist最简单的方法是将其转换为JSON,并在获得它时以相同的顺序将其100%转换为JSON

String list = new Gson().toJson(your_list);
shared.putString("KEY", list).apply();
然后,将其转换回

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

将这些arraylist保存为什么?一串地图?Sqlite(对我来说)更容易组织。我知道
SharedReferences
很容易实现,但至少可以看看sqlite。readArray中for循环的可能重复对我来说不起作用。put方法不适用。对不起,如果我不明白这个!哦,我的错。是“加”,不是“放”