Общие настройки больше не сохраняются - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть действие, которое сохраняет объекты ListView в ArrayList и загружает их при OnCreate.

Я тестировал его вчера вечером, и он работал отлично, однако, когда я снова тестировал его сегодня, он загружает то, что уже сохранено со вчерашнего дня, но больше не сохраняет новые элементы списка.

Вот мой код:

public class SubActivity extends AppCompatActivity {

Button addItem;
ImageButton back;
Button saveListBtn;
private ListView listViewer;
ArrayList<ItemObjects> items = new ArrayList<ItemObjects>();
private String key = "arg";

// Извлекает сохраненные настройки из заданной пары kay: value.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment1_item_screen);
    Bundle extra = getIntent().getExtras();
    String extraString = extra.getString(key);

// Это загружает элементы из sharedPreferences и работает правильно.

    if(loadList(extraString) != null){
        items = loadList(extraString);
    }

// Загружает listView с правильной информацией.

    final ItemObjectsAdapter adapter = new ItemObjectsAdapter(this, 
 items);
    listViewer = (ListView) findViewById(R.id.itemListView);
    listViewer.setAdapter(adapter);

// При нажатии кнопки новый объект добавляется в items ArrayList. Я просто кладу пустой объект на данный момент. Проблемы приходят на saveList(items, key). Похоже, что он работает неправильно, но он работал вчера, так как каждый раз, когда я загружаю действие, из sharedPreferences загружаются 4 элемента списка, однако я больше не могу его сохранить.

    addItem = (Button) findViewById(R.id.addItemBtn);
    addItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ItemObjects blank = new ItemObjects("", "", "", "");
            items.add(blank);
            saveList(items, key);
            adapter.notifyDataSetChanged();
        }
    });

// Вот код, который у меня есть для сохранения списка предметов. Обратите внимание, что это сработало вчера, я еще ничего не изменил.

private void saveList(ArrayList<ItemObjects> list, String key) {
    SharedPreferences appSharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(this.getApplicationContext());
    SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list);
    prefsEditor.putString(key, json);
    prefsEditor.apply();
}

// Это просто код для загрузки элементов из sharedPreferences, и, похоже, он работает правильно.

private ArrayList<ItemObjects> loadList(String key) {
    SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
    Gson gson = new Gson();
    String json = prefs.getString(key, null);
    Type type = new TypeToken<ArrayList<ExerciseObjects>>() {}.getType();
    return gson.fromJson(json, type);
}
}

Есть идеи, почему это не экономит?

1 Ответ

0 голосов
/ 06 ноября 2018

Хорошо, похоже, saveList(items, key); должно быть saveList(items, extraString);

Теперь работает.

...