Android 不能';t从游标窗口读取第0行第1列

Android 不能';t从游标窗口读取第0行第1列,android,sqlite,android-cursor,Android,Sqlite,Android Cursor,我在为相册获取相册艺术时遇到此错误。请解释此光标如何工作以及如何修复此错误 public void getAlbums() { Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"; cursor = getContentResolver().query(uri,null, selection,nu

我在为相册获取相册艺术时遇到此错误。请解释此光标如何工作以及如何修复此错误

public  void getAlbums() {
    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
    cursor = getContentResolver().query(uri,null, selection,null, null);
    if (cursor != null && cursor.moveToFirst()) {
        do {
             name = (cursor.getString(cursor.getColumnIndex(android.provider.MediaStore.Audio.Albums._ID)));
             artist = (cursor.getString(cursor.getColumnIndex(android.provider.MediaStore.Audio.Albums.ALBUM)));
             artist1 = (cursor.getString(cursor.getColumnIndex(android.provider.MediaStore.Audio.Albums.ALBUM_ART)));
            songInfo s = new songInfo(name,artist, artist1);
            _songs.add(s);
        }
        while (cursor.moveToNext());
        cursor.close();
        recyclerView1.setAdapter(albumAdapter);

    }
}
无法从游标窗口读取第0行第1列

表示对于第0行(游标中的第一行),它无法读取索引(偏移量)-1。索引0是第一个coulmn,2是第二个coulmn,以此类推。因此,您尝试访问一个不存在/不可能的列

但是,如果无法找到传递给该方法的列名作为列名,则getColumnIndex方法将返回-1

android.provider.MediaStore.Audio.Albums._ID
android.provider.MediaStore.Audio.Albums.ALBUM
android.provider.MediaStore.Audio.Albums.ALBUM_ART
因此,其中一个不解析/等同于列名

android.provider.MediaStore.Audio.Albums._ID
android.provider.MediaStore.Audio.Albums.ALBUM
android.provider.MediaStore.Audio.Albums.ALBUM_ART
你可以通过依次注释每一行来决定哪一行。或者,您可以在行
cursor=getContentResolver().query(uri,null,selection,null,null)之后添加以下内容:-

String[] columns = cursor.getColumnNames();
for (String s: columns) {
    Log.d("CURSORCOLUMNS","Found column = " + s);
}
Log.d("NAMECOLUMN","The name column is " + android.provider.MediaStore.Audio.Albums._ID);
Log.d("ARTISTCOLUMN","The artist column is " + android.provider.MediaStore.Audio.Albums.ALBUM);
Log.d("ARTIST1COLUMN","The artist1 column is "+ android.provider.MediaStore.Audio.Albums.ALBUM_ART);

这将显示光标中的列,后跟您希望位于光标中的列。后3项中的一项将不在Found列=????????。这将是-1

的原因。请验证您的
列索引
。在您的例子中,当您获得
cursor.getColumnIndex(android.provider.MediaStore.Audio.Albums.\u ID)
时,它是-1。根据你的索引,你必须增加到正确的位置。我没有得到它,请你详细说明