我正在创建一个社交媒体平台,其中已经在设备上的照片可以上传到平台上。我在github上找到了一个示例,这个示例(理论上)可以让我阅读所有jpg/png文件,并在回收视图中显示它们。获取文件的代码如下所示。
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/emulated/0/Pictures/hilarity_image"
第三条log语句表示布尔值mk为false。然后文件对象mGalleryFolder被传递到回收视图适配器的构造函数中。调用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" />显然,.length()正在对空对象进行调用。我认为这与mkdirs()返回false有关。这个假设正确吗?如何使mkdirs()返回true?记住,期望的结果是在回收视图中显示所有已经在设备上的照片,如果我处理这个问题的方法是错误的,请纠正我。
发布于 2017-11-15 23:36:56
没有创建目录。因此,您不应该继续您的代码,而是停止。
现在,您尝试列出不存在的目录中的文件。难怪listFiles返回null。
对于Android 6+,您需要添加代码来要求用户在清单中确认您请求的权限。
Google用于运行时权限。
添加代码后,可以创建该目录。
https://stackoverflow.com/questions/47318870
复制相似问题