为什么我在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;