在listview中显示文件名时是否出现NullPointerException?

时间:2014-03-25 23:04:32

标签: android android-listview nullpointerexception directory android-file

我已经在stackoverflow上查看了这些问题:

http://stackoverflow.com/questions/22332957/display-media-files-in-listview-nullpointerexception
http://stackoverflow.com/questions/9317483/showing-a-list-of-files-in-a-listview
http://stackoverflow.com/questions/5800981/how-to-display-files-on-the-sd-card-in-a-listview
http://stackoverflow.com/questions/9782168/how-to-show-audio-files-in-a-listview-in-android

但是他们都没有为我的代码工作。我不确定为什么它不起作用?

我要做的是创建一个列表视图,显示特定文件夹中的所有文件。我想要显示的特定文件夹是“下载”文件夹(如果将手机插入USB,则可以看到该文件夹​​)。为了澄清,在我的电脑上,目录看起来像这样:

This PC\Nexus 4\Internal storage\Download

这是我的代码(在我的onCreate方法中):

arraylist = new ArrayList<String>();
listview = (ListView) findViewById(R.id.list);


File file = new File(Environment.DIRECTORY_DOWNLOADS);
File[] list = file.listFiles();

if (list.length == 0)
{
    Log.w("oh no", "oh no");
}
else {
    for( int i=0; i < list.length; i++)
    {
        arraylist.add( list[i].getName() );
    }
    }

adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1
            ,arraylist);

listview.setAdapter(adapter);

我试过了

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()); 

我也试过

File directory = Environment.getExternalStorageDirectory();
file = new File(directory+ "/Download");// + "/Test");

虽然它仍然无效。

我的log cat表示在声明for循环的行上有一个nullpointerexception:

for( int i=0; i < list.length; i++)

非常感谢你!

1 个答案:

答案 0 :(得分:0)

我已经弄明白我做错了什么。 JRowan告诉我的是正确的。为了获取我的设备的下载文件夹的目录,我需要使用这段代码:

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); 

最初,它没有用,因为我忘了将此权限添加到我的Android清单中:

android.permission.WRITE_EXTERNAL_STORAGE

总而言之,我忘了写这个重要的许可。没有它,该目录实际上让我:/ storage / emulated / 0 / download(这显然不是我想要的)。

感谢两位试图回答我问题的人!