在已保存的实例

时间:2018-10-10 13:57:04

标签: android parcelable android-savedstate

实际上,我想将LinkedList保存在已保存的实例中,因此当用户再次打开应用程序时,他可以访问LinkedList中已经存储的内容。我知道我们需要将LinkedList转换为ArrayList才能存储它。保存ArrayList时出现错误

  

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 :(得分:2)

您需要这样做

ArrayList<String> arrayList = new ArrayList<String>(FavoriteQuotes);
savedInstanceState.putStringArrayList("key",arrayList );

答案 1 :(得分:0)

由于FavoriteQuotes未实现Parcelable接口,因此您将收到该异常。

ArrayListLinkedList都实现了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");
}