【问题标题】:Adding List<File> to Bundle in Android在 Android 中将 List<File> 添加到 Bundle
【发布时间】:2019-12-13 12:07:12
【问题描述】:

我在Android 中有一个Listof File's

List<File> images

我需要把它打包成一个包。我一直在尝试将它们转换为Parcelable,但我还没有找到一种方法来做到这一点。

bundle.putParcelable(BundleKeys.IMAGES.name(), images);

File来自相机图片。

【问题讨论】:

  • 这被认为是一种不好的做法,Intent 的捆绑包有一个限制(1MB)是有原因的,如果你超过它,你会得到一个例外。考虑使用其他更合适的存储类型。另请阅读:stackoverflow.com/questions/8552514/…

标签: android file bundle parcelable


【解决方案1】:

用这个来传递:

ArrayList<File> images; //Your list
bundle.putSerializable(BundleKeys.IMAGES.name(), images);

并使用它来检索它:

ArrayList<File> images = (ArrayList<File>) getIntent().getSerializableExtra(BundleKeys.IMAGES.name());

【讨论】:

  • 抱歉这么晚才回答,但是当我尝试将图像放入包中时,我收到此错误:“错误的第二个参数类型。找到'java.util.ArrayList' , 需要 'android.os.Parcelable'。当尝试像 (Serializable) images 一样输入时,我遇到了类似的错误。
  • 您确定您使用的是bundle.putSerializable() 而不是bundle.putParcelable()
  • 咳咳……是的,对不起,那是我的错误。如果你这么善良,还有一个问题。我没有通过Serializable 获得意图,而是通过Bundle bundle。所以我正在做bundle.getSerializableExtra(..),但它说它不能resolve method getSerializableExtra()。我在那里做错了什么。
  • 捆绑包没有getSerializableExtra()。相反,您可以使用getSerializable()
【解决方案2】:

java.io.File 是可序列化的,因此您可以将其设为可序列化。但是,它仅适用于一个文件。但是,它不是很有效,并且可能导致 ClassCastException,但您也可以将 List 转换为 Serializable。

bundle.putSerializable("IMAGES", (Serializable) images);

【讨论】:

    【解决方案3】:

    想想你是否真的需要传递整个File 对象。也许您可以映射一些数据并仅通过Bundle 传递它们。

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 2020-09-18
      • 2016-12-15
      • 2012-12-26
      • 2014-05-13
      • 1970-01-01
      相关资源
      最近更新 更多