为什么 Android 的 MediaStore.Audio.Album.ALBUM_ID 导致 IllegalStateException 错误?
Why is Android's MediaStore.Audio.Album.ALBUM_ID causing an IllegalStateException error?
我正在尝试从 MediaStore 获取专辑信息。我可以很容易地获得名称和艺术家,但由于某些原因,ALBUM_ID 列在我尝试访问它时出现错误。
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:450)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51 )
at android.database.CursorWrapper.getString(CursorWrapper.java:114)
at sage.musicplayer.MainActivity.getAlbumList(MainActivity.java:1540)
at sage.musicplayer.MainActivity.onCreate(MainActivity.java:238)
我似乎找不到解决办法。任何帮助表示赞赏!下面是我必须获取专辑信息并将它们添加到 ArrayList 的方法。
public ArrayList<Album> getAlbumList() {
ArrayList<Album> temp = new ArrayList<>();
/*String[] proj = {MediaStore.Audio.Albums.ALBUM_ID,
MediaStore.Audio.Albums.ARTIST,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.NUMBER_OF_SONGS
};*/
Cursor albumCursor = getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, null, null, null);
if(albumCursor != null && albumCursor.moveToFirst()) {
int albumName = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM);
int albumArtist = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ARTIST);
int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID);
do {
String thisAlbumName = albumCursor.getString(albumName);
String thisAlbumArtist = albumCursor.getString(albumArtist);
String thisAlbumID = albumCursor.getString(albumID);//this line is giving me an error
temp.add(new Album(thisAlbumName, thisAlbumArtist, thisAlbumID));
}while(albumCursor.moveToNext());
}
return temp;
}
我也遇到过这个问题。您可以通过更改
轻松解决此问题
int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID);
到
int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums._ID);
也就是说,您需要在想要 AlbumID
相册时使用 _ID
。我不知道为什么 MediaStore
开发人员使用 _ID
而不是 ALBUM_ID
等东西。
我正在尝试从 MediaStore 获取专辑信息。我可以很容易地获得名称和艺术家,但由于某些原因,ALBUM_ID 列在我尝试访问它时出现错误。
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:450)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51 )
at android.database.CursorWrapper.getString(CursorWrapper.java:114)
at sage.musicplayer.MainActivity.getAlbumList(MainActivity.java:1540)
at sage.musicplayer.MainActivity.onCreate(MainActivity.java:238)
我似乎找不到解决办法。任何帮助表示赞赏!下面是我必须获取专辑信息并将它们添加到 ArrayList 的方法。
public ArrayList<Album> getAlbumList() {
ArrayList<Album> temp = new ArrayList<>();
/*String[] proj = {MediaStore.Audio.Albums.ALBUM_ID,
MediaStore.Audio.Albums.ARTIST,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.NUMBER_OF_SONGS
};*/
Cursor albumCursor = getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, null, null, null);
if(albumCursor != null && albumCursor.moveToFirst()) {
int albumName = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM);
int albumArtist = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ARTIST);
int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID);
do {
String thisAlbumName = albumCursor.getString(albumName);
String thisAlbumArtist = albumCursor.getString(albumArtist);
String thisAlbumID = albumCursor.getString(albumID);//this line is giving me an error
temp.add(new Album(thisAlbumName, thisAlbumArtist, thisAlbumID));
}while(albumCursor.moveToNext());
}
return temp;
}
我也遇到过这个问题。您可以通过更改
轻松解决此问题int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID);
到
int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums._ID);
也就是说,您需要在想要 AlbumID
相册时使用 _ID
。我不知道为什么 MediaStore
开发人员使用 _ID
而不是 ALBUM_ID
等东西。