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。根据你的索引,你必须增加到正确的位置。我没有得到它,请你详细说明