2015-04-05 66 views
0

(修正在端)(解決)應用程序使用文件

我試圖加載位於路徑進入一個ListView目錄目錄加載到一個數組時崩潰。每當我要求它列出位於根目錄「/」的目錄時,它就可以工作。然而,當我試着問到另一個目錄,如Environment.getExternalStorageDirectory()內加載文件的toString(),它崩潰的負載,並表示如下:

com.hapticlabs.backups I/Info: Path to backups is /storage/emulated/0 
com.hapticlabs.backups D/AndroidRuntime﹕ Shutting down VM 
com.hapticlabs.backups E/AndroidRuntime﹕ FATAL EXCEPTION: 
     Process: com.hapticlabs.test, PID: 9155 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hapticlabs.test/com.hapticlabs.test.MainActivity}: java.lang.NullPointerException: storage == null 

它說,它的崩潰在我的ArrayAdapter 。我認爲(知道?)這是因爲我對待File []就像是一個String []。但是,我無法弄清楚如何解決這個問題。

private void getBackups() { 
     String backupspath = Environment.getExternalStorageDirectory().toString(); 
     Log.i(info, "Path to backups is "+backupspath); 
     File f = new File(backupspath); 
     File[] backuplist = f.listFiles(); 
     //String[] testlist = getResources().getStringArray(R.array.test_array); 
     ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.list_item, backuplist); 
     backupsListView.setAdapter(arrayAdapter); 
    } 

如果我嘗試:

 String[] backuplist = f.listFiles(); 

Android的工作室剛剛告訴我,去改變它到文件[]。

爲了解決這個問題,我不得不創建另一個數組, ArrayList<String> backupslist = new ArrayList<String>();,再加入該目錄添加到陣列文件循環:

for (File inFile : dirlocation) { 
      if (inFile.isDirectory()) { 
       backupslist.add(inFile.getName()); 
      } 
     } 

感謝您的幫助!

+0

請發佈整個堆棧跟蹤,而不是幾行。還要指出該堆棧跟蹤中的哪些行指向上面源代碼片段中的行。請記住,listFiles()可以返回null,並且你不處理這種情況。 – CommonsWare 2015-04-05 20:54:26

回答

相關問題