Общие предпочтения: Сохранить в ListView

У меня нет проблем, чтобы сохранить список в sharedpreferences и показать его в виде списка, но моя проблема в том, когда я перезагружаю приложение и пытаюсь добавить элементы в просмотр списка, старые сохраненные элементы удалены. есть мой код:

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

}

public void getDates () {

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

2 ответа

Пожалуйста, попробуйте этот аррлист из двух хранилищ функций и извлеките их в sharedprefrence

 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));
        }
    }
}

Проблема в том, что вы продолжаете перезаписывать старые данные, потому что вы, вероятно, не извлекаете старые данные и не добавляете в них новые данные.
Получить ваши старые данные из 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);

Теперь ArrayList first есть все данные. И например сделать

editor.putStringSet("KEY", first).apply();
Другие вопросы по тегам