Reputation: 97
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
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