(修正在端)(解決)應用程序使用文件
我試圖加載位於路徑進入一個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());
}
}
感謝您的幫助!
請發佈整個堆棧跟蹤,而不是幾行。還要指出該堆棧跟蹤中的哪些行指向上面源代碼片段中的行。請記住,listFiles()可以返回null,並且你不處理這種情況。 – CommonsWare 2015-04-05 20:54:26