簡體   English   中英

為什么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);

也就是說,只要你想要Album的AlbumID就需要使用_ID 我不知道為什么MediaStore開發人員使用_ID而不是ALBUM_ID等東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM