【问题标题】:Android - How to cast Object [] to File []Android - 如何将对象 [] 转换为文件 []
【发布时间】:2015-12-04 04:15:57
【问题描述】:

我正在用 android 创建一个应用程序!我正在尝试使用这行代码从我的 Main Activity 类传递 File[]:

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

使用这行代码到我的 MapsActivity:

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[]

似乎是什么问题?我该如何解决?谢谢你的回复:)

【问题讨论】:

  • 您不能将Object[] 数组放入Bundle。您需要找到其他方法将文件数组传递给另一个 Activity。

标签: java android file object


【解决方案1】:

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

【讨论】:

  • 嗯。是的!但我需要将它传递给另一个活动。
  • 类文件也实现了可序列化,只要一个 Intent 就可以了。但我认为这是你可以在每个活动上做的事情,所以你为什么不在你的 MapActivity 上获取你的 listFile
【解决方案2】:

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

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

【讨论】:

  • 这是要走的路,IMO。创建一个实现Parceable 的自定义类似乎并非易事,这样您就可以将文件从一个活动传递到另一个活动。只需在一项活动中使用文件,然后关闭它们。如果您真的再次需要它们,请在另一个活动中打开。
【解决方案3】:

问题是getIntent().getExtras().get("*KEY*"); 返回一个对象,你不能简单地将一个对象[] 转换为一个文件[]。

所以你要做的就是将对象数组中的每个对象都转换为文件。

作为一个例子,你可以这样做:

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();

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2018-10-04
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2018-03-16
    • 2018-11-20
    相关资源
    最近更新 更多