0

我在 sharedpreferences 中保存列表并在列表视图中显示它没有问题,但我的问题是当我重新启动应用程序并尝试将项目添加到 listview 删除的旧存储项目时。有我的代码:

public void SaveDatesToList(){
    list.add(i+"");
    array = new String[list.size()];
    list.toArray(array);
    tinyDB.putListString("DATES",list);

}

公共无效getDates(){

    for (String str:tinyDB.getListString("DATES")) {
        list.add(str);
    }
4

2 回答 2

2

请在 sharedprefrence 中尝试这两个函数 store arrlist 和 retrive arraylist

 private void storeArray() {
    ArrayList<String> arr1 = new ArrayList<>();
    SharedPreferences prefs = this.getSharedPreferences("Demo", Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = prefs.edit();

    arr1.add("A");
    arr1.add("B");
    arr1.add("C");
    arr1.add("D");
    arr1.add("E");

    Set<String> set = new HashSet<String>();
    set.addAll(arr1);
    edit.putStringSet("yourKey", set);
    edit.commit();
}

private void retriveArray() {
    SharedPreferences prefs = this.getSharedPreferences("Demo", Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = prefs.edit();
    Set<String> set = prefs.getStringSet("yourKey", null);
    ArrayList<String> sample = new ArrayList<String>(prefs.getStringSet("yourKey", null));
    Log.d("Check Size", "Check Size" + sample.size());

    if (sample.size() > 0) {
        for (int i = (sample.size() - 1); i >= 0; i--) {
            Log.d("Array Value", "Array Value" + sample.get(i));
        }
    }
}
于 2017-05-16T07:22:44.240 回答
0

问题是您不断覆盖旧数据,因为您可能不会检索旧数据并将新数据附加到它。
从 ArrayList 中检索旧数据SharedPreference并将它们与新的 ArrayList 结合。然后存储组合的ArrayList。

组合示例ArrayList<String>

ArrayList<String> first = new ArrayList<String>();
ArrayList<String> second = new ArrayList<String>();      
//Let both arraylists have some data
first.add("data1");   
second.add("data2");   

// now first contains "data1" and "data2"
first.addAll(second);

现在 ArrayListfirst拥有所有数据。例如做

editor.putStringSet("KEY", first).apply();
于 2017-05-16T07:37:25.383 回答