Android File.mkdirs()返回false

Android File.mkdirs()返回false,android,file,Android,File,我正在创建一个社交媒体平台,可以将设备上已有的照片上传到该平台。我在github上找到了一个示例,理论上,它应该可以让我读取所有jpg/png文件并在recyclerview中显示它们。获取文件的代码如下所示 private void createImageGallery() { File storageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

我正在创建一个社交媒体平台,可以将设备上已有的照片上传到该平台。我在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);
        }
    }
第一条log语句等于true,第二条显示字符串

“/storage/simulated/0/Pictures/hilarity\u image”

第三个log语句表示布尔值mk为false。然后将文件对象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" />
清单中的一些权限如下所示

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" />


显然,正在对空对象调用.length()。我认为这与mkdirs()返回false有关。这个假设正确吗?如何使mkdirs()返回真值?请记住,理想的结果是在recyclerview中显示设备上已有的所有照片,如果我解决此问题的方法不正确,请更正。

未创建目录。因此,您不应该继续使用代码,而应该停止

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

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

谷歌的运行时权限


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

是否请求写入权限?谢谢你,从现在起我一定要记住这一点。