Khadija Hameed
Khadija Hameed

Reputation: 97

Why am I getting no such column exception in MediaStore query android?

In my app, I am trying to get all Artists. To get this I am using below code

 public static List<ArtistModel> getAllArtists(Activity activity, Context context) {
    List<ArtistModel> artistList = new ArrayList<>();
    if (ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_EXTERNAL_STORAGE) !=
            PackageManager.PERMISSION_GRANTED) {

        String []permission = new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE};

        ActivityCompat.requestPermissions(activity, permission, 100);

    } else {
        ContentResolver contentResolver = context.getContentResolver();

        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String [] projection = {MediaStore.Audio.Artists.ARTIST,
                                MediaStore.Audio.Artists.ARTIST_KEY,
                                MediaStore.Audio.Artists.NUMBER_OF_ALBUMS,
                                MediaStore.Audio.Artists.NUMBER_OF_TRACKS,
                                MediaStore.Audio.Artists._ID,
                                MediaStore.Audio.Artists._COUNT};
        String sortOrder = MediaStore.Audio.Artists.ARTIST + " ASC";
        Cursor cursor = contentResolver.query(uri, projection, null, null, sortOrder);

        if (cursor != null && cursor.moveToFirst()) {
            int totalArtists = cursor.getCount();
            LogUtility.debugLog(SongUtility.class.getSimpleName(), "Total number of artists " + totalArtists);
            while (cursor.moveToNext()) {
                ArtistModel artistModel = new ArtistModel();
                artistModel.setArtist(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Artists.ARTIST)));
                artistModel.setArtistKey(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Artists.ARTIST_KEY)));
                artistModel.setNumberOfAlbums(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Artists.NUMBER_OF_ALBUMS)));
                artistModel.setNumberOfTracks(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Artists.NUMBER_OF_TRACKS)));
                artistModel.setArtistId(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Artists._ID)));
                artistModel.setArtistCount(cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Artists._COUNT)));

                artistList.add(artistModel);
            }
        }
    }
    return artistList;
}

But when I execute above code, I am getting below exception

SQLiteException: no such column: number_of_albums (code 1): , while compiling: SELECT artist, artist_key, number_of_albums, number_of_tracks, _id, _count FROM audio ORDER BY artist ASC

I went through Media Store class and I found that MediaStore.Audio.Artists is implementing MediaStore.Audio.ArtistColumns and that interface has below mentioned columns

   public interface ArtistColumns {
        String ARTIST = "artist";
        String ARTIST_KEY = "artist_key";
        String NUMBER_OF_ALBUMS = "number_of_albums";
        String NUMBER_OF_TRACKS = "number_of_tracks";
    }

My question is when these columns are available why I am facing no such column exception. Am I missing anything? Any help?

Upvotes: 0

Views: 805

Answers (1)

pleft
pleft

Reputation: 7905

You are using this URI:

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

instead of:

Uri uri = MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI;

Check that your projection is referencing columns from MediaStore.Audio.Artists not MediaStore.Audio.Media

Upvotes: 1

Related Questions