在保存的实例中保存 ArrayList<String> 时出错

Error while saving ArrayList<String> in saved instance

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

wrong 2nd argument type in putParcelableArrayList(). Found 'java.util.ArrayList<java.lang.String>', required 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);
}

我知道有可用的解决方案,但似乎对我没有帮助。谢谢。

你得到那个异常是因为 FavoriteQuotes 没有实现 Parcelable 接口。

ArrayListLinkedList 都实现了 Serializable 接口,这意味着有一种更简单的方法可以直接保留 LinkedList

假设 FavoriteQuotesLinkedList 个字符串:

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

你需要这样做

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