File.mkdirs()返回false

时间:2017-11-15 23:09:38

标签: android file

我正在创建一个社交媒体平台,可以将设备上已有的照片上传到平台。我在github上找到了一个样本(理论上)应该让我能够读取所有jpg / png文件并在recyclerview中显示它们。获取文件的代码如下所示。

private void createImageGallery() {
        File storageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        mGalleryFolder = new File(storageDirectory, GALLERY_LOCATION);
        Log.i("gallery", "" + (mGalleryFolder != null));
        Log.i("gallery", mGalleryFolder.toString());
        if (!mGalleryFolder.exists()) {
            boolean mk = mGalleryFolder.mkdirs();
            Log.i("gallery", "mkdirs returns " + mk);
        }
    }

第一个日志语句等于true,第二个显示字符串

"/storage/emulated/0/Pictures/hilarity_image"

第三个日志语句表示布尔mk为false。然后将File对象mGalleryFolder传递给recyclerview适配器的构造函数。调用adapter.getItemCount()时会引发错误。代码如下所示

public int getItemCount() {
        return mGalleryFolder.listFiles().length;
    }

清单中的一些权限如下所示

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

显然,在null对象上调用.length()。我认为这与mkdirs()返回false有关。这个假设是否正确?我怎么做才能使mkdirs()返回true?请记住,所需的结果是在recyclerview中显示设备上已有的所有照片,如果我对此问题的解决方法不正确,请更正我。

1 个答案:

答案 0 :(得分:1)

未创建目录。所以你不应该继续你的代码而是停止。

现在,您尝试列出不存在的目录中的文件。难怪listFiles然后返回null。

对于Android 6+,您需要添加代码以要求用户确认您在清单中请求的权限。

Google获取运行时权限。

添加代码后,您可以创建该目录。