为什么我在MediaStore查询android中没有遇到这样的列异常?

为什么我在MediaStore查询android中没有遇到这样的列异常?,android,Android,在我的应用程序中,我试图获得所有的艺术家。为了得到这个,我使用下面的代码 public static List<ArtistModel> getAllArtists(Activity activity, Context context) { List<ArtistModel> artistList = new ArrayList<>(); if (ContextCompat.checkSelfPermission(context, andro

在我的应用程序中,我试图获得所有的艺术家。为了得到这个,我使用下面的代码

 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;
}
我浏览了Media Store类,发现MediaStore.Audio.Artists正在实现MediaStore.Audio.ArtistColumns,该接口包含以下列

   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";
    }

我的问题是,这些专栏何时可用,为什么我没有遇到这样的专栏例外。我遗漏了什么吗?有什么帮助吗?

您正在使用此URI:

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
而不是:

Uri uri = MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI;

检查您的
projection
是否引用了
MediaStore.Audio.Artists
而不是
MediaStore.Audio.Media

也许这会有所帮助:我尝试了您的代码,但我现在面临以下异常SQLiteException:没有这样的列:\u count(代码1):,coulmn count在BaseColumn中可用,并且class Artist正在实现base column,那么为什么会抛出该异常呢?您确定相关表中存在该列吗?它可能不存在,扩展
BaseColumn
接口并不一定意味着所有声明的列都存在。如果表中的列可用或不可用,如何检查此列?
Uri uri = MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI;