我正在创建一个社交媒体平台,可以将设备上已有的照片上传到平台。我在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中显示设备上已有的所有照片,如果我对此问题的解决方法不正确,请更正我。
答案 0 :(得分:1)
未创建目录。所以你不应该继续你的代码而是停止。
现在,您尝试列出不存在的目录中的文件。难怪listFiles然后返回null。
对于Android 6+,您需要添加代码以要求用户确认您在清单中请求的权限。
Google获取运行时权限。
添加代码后,您可以创建该目录。