2015-04-05 34 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

回答

相关问题