2015-12-04 49 views
1

我在android中創建應用程序!我想使用此行代碼我的主要活動類通過文件[]:Android - 如何將對象[]轉換爲文件[]

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 []不能是ca st到java.io.File []

什麼似乎是問題?我該如何解決它?感謝您的回覆:)

+0

你不能把一個'對象[]數組'入'Bundle'。您需要找到其他方式將您的文件數組傳遞給另一個活動。 –

回答

3

file.listFiles()已經返回一個File [],你不需要再次施放。

+0

嗯。是啊!但我需要將它傳遞給另一個活動。 – giroxasmnl

+0

class File也實現了Serializable,只是一個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(); 
    } 
+0

這是要走的路,IMO。創建一個實現'Parceable'的自定義類似乎不是微不足道的,因爲您可以將文件從一個活動傳遞到另一個活動。只需在一個活動中使用這些文件,然後關閉它們即可。如果你真的需要他們,然後打開另一個活動。 –

0

的問題是,getIntent().getExtras().get("*KEY*");返回一個對象,你不能只是投一個Object []對文件[]。

所以你想要做的是將對象陣列中的每個對象都轉換爲文件。

舉個例子,你可以做這樣的事情:

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(所有文件的目錄)進入附加功能。 然後你就可以通過提取所有文件:

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