음악 제목에서 해당 아티스트, 앨범의 이름 및 앨범 표지를 시도하십시오. 나는 LoaderManager
과 CursorLoader
을 사용합니다. 활동이 생성되면 로더를 getLoaderManager().initLoader(1, null, this)
으로 점심을 먹습니다.LoaderManager 및 MediaStore에 여러 로더가있는 "No such column found"
에 생성 변수 album
가 전체 클래스에 대해 정의하고 dataalbumsTrackRequested
은 문자열입니다
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
if(loader.getId()==1){
//Fill the text view with their value
//Set Title
String title =cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
TextView titleView = (TextView)getView().findViewById(R.id.musicTitle);
titleView.setText(title);
//Set Artist
String artist =cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
TextView artistView = (TextView)getView().findViewById(R.id.artistName);
if (artist.equals("<unknown>")){artistView.setText(R.string.unknown_album);}
else { artistView.setText(artist);}
//Set Album
album =cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
TextView albumView = (TextView)getView().findViewById(R.id.albumTitle);
if (album.equals("<unknown>")){albumView.setText(R.string.unknown_album);}
else { albumView.setText(album);}
}
else {
ImageView coverView = (ImageView)getView().findViewById(R.id.playerCoverView);
if (cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)).equals(null)){
//if no cover returned, display the by default (empty) cover
coverView.setImageResource(R.drawable.listcoverthumbnail);}
else{
Bitmap coverImage = BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)));
coverView.setImageBitmap(coverImage);}
getLoaderManager().initLoader(2, null, this);
}
마침로드에 로더
static final String[] PLAYER_SUMMARY_PROJECTION = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM};
static final String[] PLAYER_COVER_SUMMARY_PROJECTION = { MediaStore.Audio.Albums.ALBUM_ID, MediaStore.Audio.Albums.ALBUM_ART, MediaStore.Audio.Albums.ALBUM};
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
CursorLoader loader;
if(id==1){
String where = android.provider.MediaStore.Audio.Media.TITLE
+ "=?";
String whereVal[] = {dataalbumsTrackRequested};
loader = new CursorLoader(getActivity(), MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
PLAYER_SUMMARY_PROJECTION, where, whereVal,null); }
else{
String where2 = android.provider.MediaStore.Audio.Media.ALBUM
+ "=?";
String whereVal2[] = {album};
loader = new CursorLoader(getActivity(), MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
PLAYER_COVER_SUMMARY_PROJECTION, where2, whereVal2,null); }
return loader;
}
: 여기 내 로더의 코드는 원하는 앨범의 제목과 동일합니다. 그때 물론 커버가 표시되지 않습니다 (ID = 2) 두 번째 로더를 제거하면
06-19 16:21:42.720: E/AndroidRuntime(6516): Caused by: android.database.sqlite.SQLiteException: no such column: album_art: , while compiling: SELECT album_id, album_art, album FROM audio WHERE (album=?)
하지만, 응용 프로그램이 충돌하지 않습니다
응용 충돌은 내가 얻을. 따라서 문제는 두 번째 로더에서 발생합니다.
내가 뭘 잘못하고 있니? 나는 이미 다른 애플 리케이션 중 하나에서 이렇게 커버를 얻기 위해 달성했습니다 colomn album_art
존재 확신합니다. 하지만 여기에서는 버그가 어디에서 유래되었는지 찾을 수 없습니다. 여러 대의 로더를 사용하기 때문입니까?