Ошибка при сохранении ArrayList <String>в сохраненном экземпляре - PullRequest
0 голосов
/ 10 октября 2018

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

неверный 2-й тип аргумента в putParcelableArrayList ().Найдено 'java.util.ArrayList<java.lang.String>', требуется java.util.ArrayList<?extends android.os.Parcelable>.

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    ArrayList<String> arrayList = new ArrayList<String>(FavoriteQuotes);
    savedInstanceState.putParcelableArrayList("quotes",arrayList);
}

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

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вам нужно сделать вот так

ArrayList<String> arrayList = new ArrayList<String>(FavoriteQuotes);
savedInstanceState.putStringArrayList("key",arrayList );
0 голосов
/ 10 октября 2018

Вы получаете это исключение, потому что FavoriteQuotes не реализует интерфейс Parcelable.

Оба ArrayList и LinkedList реализуют интерфейс Serializable, что означает, что есть гораздо более простой способсохраняя ваш LinkedList напрямую.

Предполагая, что FavoriteQuotes является LinkedList строк:

Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putSerializable("quotes", FavoriteQuotes);
}

Когда вы восстановите его, вам нужно будет вызвать getSerializable и привестивернемся к исходному типу:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    FavoriteQuotes = (LinkedList) savedInstanceState.getSerializable("quotes");
}
...