【问题标题】:Error while saving ArrayList<String> in saved instance在保存的实例中保存 ArrayList<String> 时出错
【发布时间】:2018-10-10 13:57:03
【问题描述】:

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

putParcelableArrayList() 中的第二个参数类型错误。找到“java.util.ArrayList&lt;java.lang.String&gt;”,需要java.util.ArrayList&lt;?extends android.os.Parcelable&gt;

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

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

【问题讨论】:

    标签: android parcelable android-savedstate


    【解决方案1】:

    你需要这样做

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

    【讨论】:

      【解决方案2】:

      您收到该异常是因为 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");
      }
      

      【讨论】:

      • 谢谢。上面的建议对我有用。感谢您向我展示了另一种方法。效果很好。
      猜你喜欢
      • 2018-07-25
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多