当前位置: 首页 > 知识库问答 >
问题:

Android-如何将对象[]转换为文件[]

伯向晨
2023-03-14

我正在用android创建一个应用程序!我尝试使用下面这行代码从我的主Activity类中传递文件[]:

File[] listFile;
File file = new File(android.os.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Eye Spy");
   if (file.isDirectory()) {
       listFile = (File[]) file.listFiles();
   }
Intent i = new Intent();
i.putExtra("images", listFile);

使用这行代码到我的MapsActive:

listFile = (File[]) getIntent().getExtras().get("images");

但是当我运行该应用程序时,它会显示一条错误消息:

java.lang.RuntimeException:无法启动活动ComponentInfo{com.example.pathnrdo.eyespy1/com.example.pathnrdo.eyespy1.MapsActivity}:java.lang.ClassCastException:java.lang.Object[]无法强制转换为java.io.File[]

有什么问题吗?我该怎么解决呢?感谢您的回复:)

共有3个答案

乐正锦
2023-03-14

问题是getIntent().getExtras()。获取(“*键*” 返回一个对象,您不能简单地将对象[]转换为文件[]。

因此,您要做的是将对象数组中的每个对象强制转换为文件。

例如,您可以这样做:

final Object[] potentialFiles = (Object[]) getIntent().getExtras().getSerializable("*KEY*");
List<File> list = new LinkedList<>();

Objects.requireNonNull(potentialFiles);
for (final Object o : potentialFiles) {
    if (o instanceof File) {
        list.add((File) o);
    }
}

File[] files = list.toArray(new File[]{});

或者您可以简单地将parentFile(所有文件的目录)放入Extras中。然后,您可以通过以下方式提取所有文件:

//First Activity
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("*KEY*", parentFile);
startActivity(intent);

//Second Actitiy
File parentFile = (File) getIntent().getExtras().getSerializable("*KEY*");
File[] files = parentFile.listFiles();

楚志强
2023-03-14

可以我已经解决了我的问题!我只是在MapsActivity中实现了这些代码,这样我就不必将其从一个活动传递到另一个活动:

File[] listFile;
File file = new File(android.os.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Eye Spy");
   if (file.isDirectory()) {
       listFile = (File[]) file.listFiles();
   }
江华容
2023-03-14

file.listFiles() 已经返回了一个 File[],你不需要再次转换。

 类似资料:
  • 问题内容: 如何将java对象转换为InputStream? 问题答案: 您可以使用ObjectOutputStream 您将对象(以下代码中的obj)写入ObjectOutputStream,要转换为输入流的对象必须实现Serializable。

  • 问题内容: 如何在Java中将对象转换为int? 问题答案: 如果您确定该对象是: 或者,从Java 7开始,您可以等效地编写: 当心,它可以抛出一个,如果你的对象是不是和你要的对象是。 这样,您就假定对象是一个整数(包装的int),然后将其拆箱为一个int。 是基元,因此不能将其存储为,唯一的方法是将考虑/装箱为,然后存储为。 如果您的对象是,则可以使用方法将其转换为简单的int: 如果您的对象

  • 问题内容: 如何将String对象转换为Date对象? 我想我需要做这样的事情: 任何帮助将不胜感激。 问题答案: SimpleDateFormat dateFormat = new SimpleDateFormat(“dd.MM.yyyy”); Date date = dateFormat.parse(“1.1.2001”); 有关详细信息,请参阅: SimpleDateFormat文档

  • 问题内容: 如何将Python对象转换为对象? 我有一个提供第一个库的库,另一个提供了第二个库的库。 问题答案: 使用time.mktime()将时间元组(以当地时间为单位)转换为自大纪元以来的秒数,然后使用datetime.fromtimestamp()获得datetime对象。

  • 问题内容: 我想将org.w3c.dom.Document对象转换为String。我正在使用Java 6,并且愿意使用能够完成任务的任何(完全免费的)技术。我从此线程尝试了解决方案- 在Java中,有比此代码更优雅的方法来将XML文档转换为Java中的String吗?,他们在哪里 但遭到了以下可怕的例外…… 问题答案: 如果您可以进行转换,则可以尝试此操作。

  • 问题内容: response->docs); ?> 输出以下内容: 如何将该对象转换为数组?我想输出以下内容: 这可能吗? 问题答案: 您应该查看get_object_vars,因为您的属性被声明为私有,所以您应该在类内部调用此方法并返回其结果。 注意,对于像字符串这样的原始数据类型,它会很好用,但是我不知道它在嵌套对象中的行为。 在您的情况下,您必须执行类似操作;