Android 如何使用光标读取文件夹的内容

Android 如何使用光标读取文件夹的内容,android,android-layout,android-intent,Android,Android Layout,Android Intent,我在读取复制到此路径:/sdcard/DCIM/wallper/文件夹中的一些图像文件时遇到问题 问题在于随机读取这些图像: 我正在使用这个方法,但似乎光标没有读取我传递的URI,发生了什么 public static Uri getRandomImage(ContentResolver resolver) { String[] projection = new String[] { BaseColumns._ID }; String folder

我在读取复制到此路径:/sdcard/DCIM/wallper/文件夹中的一些图像文件时遇到问题

问题在于随机读取这些图像:

我正在使用这个方法,但似乎光标没有读取我传递的URI,发生了什么

public static Uri getRandomImage(ContentResolver resolver) {

    String[] projection = new String[] {
        BaseColumns._ID
    };


    String folder = "/sdcard/DCIM/Wallpaper/";
    folder = folder + "%";
    String where = Media.DATA + " LIKE ?";
    String[] whereArgs = new String[]{folder};

    Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        projection, where, whereArgs, MediaColumns._ID);


    if (cursor == null || cursor.getCount() <= 0) {
            return null;
    }

    cursor.moveToPosition(new Random().nextInt(cursor.getCount()));

    return Uri.withAppendedPath(uri, cursor.getString(0));
}

您正在尝试获取一个目录的Uri,该目录将不会出现在媒体Uri中。因此,您将获得FilenotfoundException

您必须进行自定义查询才能仅获取目录中存在的图像

编辑: 从未尝试过,但一定要尝试一下。where子句应该使用LIKE。如果这不起作用,您可能需要四处查看以构造LIKE子句

String folder = "/sdcard/DCIM/Wallpaper/";
folder = folder + "%";
String where = Media.DATA + " LIKE ?";
String[] whereArgs = new String[]{folder};

cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection, where, whereArgs, MediaColumns._ID);
编辑2:


getContentResolver
中,返回为null
getContentResolver
是一种上下文方法。使用
上下文。getContentResolver

我用你的建议实现的代码编辑了我的问题,但仍然给我错误,我发布了日志。我不知道你已经有了contentresolver,使用resolver而不是getContentResolver。我用你的建议实现的代码编辑了我的问题,但仍然再次给我错误
String folder = "/sdcard/DCIM/Wallpaper/";
folder = folder + "%";
String where = Media.DATA + " LIKE ?";
String[] whereArgs = new String[]{folder};

cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection, where, whereArgs, MediaColumns._ID);