Я использую курсор для навигации по внутренним папкам, но папки пусты? - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь найти все папки в моем внутреннем хранилище, которые содержат изображения.Для этого я использую курсор.Курсор не нулевой, он пустой, есть ли другое место, на которое я должен обратить внимание, чтобы найти эти папки?

        imageFolders = new ArrayList<String>();

        String[] projection = new String[]{
                MediaStore.Images.Media.DATA,
                MediaStore.Images.Media._ID,
                MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
                MediaStore.Images.Media.DATE_TAKEN};
        System.out.println("Print progress: Created String Projection");
        System.out.println("Print progress: " + projection[0] + " " + projection[1] + " " + projection[2] + " " + projection[3]);

        Uri imageUri = MediaStore.Images.Media.INTERNAL_CONTENT_URI ;
        System.out.println("Print progress: images uri " + imageUri);
        final String orderBy = android.provider.MediaStore.Images.Media.DATE_TAKEN;
        System.out.println("Print progress: orderBy " + orderBy);

        Cursor cur = getContentResolver().query(imageUri, projection, // Which columns to return
                null, // Which rows to return (all rows)
                null, // Selection arguments (none)
                orderBy + " DESC" // Ordering
        );
        System.out.println("Print progress: cursor created");
        ArrayList<String> imagePath;



        if (cur.moveToFirst()) {
            System.out.println("Print progress: entered cursor"
            );
            String bucket, date;

            int bucketColumn = cur.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
            System.out.println("Print progress: bucketColumn: " + bucketColumn);
            int dateColumn = cur.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
            System.out.println("Print progress: dateColumn: " + dateColumn);
            do {
                bucket = cur.getString(bucketColumn);
                System.out.println("Print progress: bucket: " + bucket);

                date = cur.getString(dateColumn);
                System.out.println("Print progress: date: " + date);
                if (!imageFolders.contains(bucket)) {
                    imageFolders.add(bucket);
                }
                imagePath = listImageByFolder.get(bucket);
                if (imagePath == null) {
                    imagePath = new ArrayList<String>();
                }
                imagePath.add(cur.getString(cur
                        .getColumnIndex(MediaStore.Images.Media.DATA)));
                listImageByFolder.put(bucket, imagePath);
            } while (cur.moveToNext());
        }
        System.out.println("Print progress: Found the Internal Image Folders");
        return imageFolders;

1 Ответ

0 голосов
/ 08 октября 2018

Предполагая, что отказывается от moveToFirst , вы имеете в виду, что блок if пропущен, потому что moveToFirst() возвращает false.Это происходит, когда Cursor пусто:

public abstract boolean moveToFirst ()

Переместить курсор в первую строку.Этот метод вернет false, если курсор пуст.- Android API .

...