2015-12-08 81 views
2

我試圖從MediaStore中獲取專輯信息。我可以很容易地獲得名稱和藝術家,但由於某種原因,當我嘗試訪問它時,ALBUM_ID列給我一個錯誤。Android的MediaStore.Audio.Album.ALBUM_ID爲什麼會導致IllegalStateException錯誤?

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; 
} 
+0

albumName,albumArtist和albumID的值是什麼?用Log.d'記錄它們 – pskink

回答

2

我也遇到了這個問題。您可以輕鬆地通過改變

int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID);

解決這個問題

int albumID = albumCursor.getColumnIndex(MediaStore.Audio.Albums._ID);

這就是你需要使用_ID每當你想要的專輯AlbumID。我不知道爲什麼MediaStore開發者使用_ID而不是ALBUM_ID等東西。

+0

謝謝!你是最棒的,裴! –

+0

在我的情況下,它使用'string a = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums._ID));'。非常感謝。 – Pedo

相關問題