(Android) 从片段子类中的新线程检索音乐专辑封面时出错



在片段子类中,我创建了一个新线程并尝试检索专辑位图,但应用程序停止工作。我在 MainActivity 类中使用了 FragmentPagerAdapter 的片段。 这是线程类的代码 -

new Thread() {
public void run() {
ContentResolver musicResolver = getActivity().getContentResolver();
Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] columns = {
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Albums._ID,
MediaStore.Audio.Media.DATA
};
String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
Cursor albumCursor = musicResolver.query(musicUri, columns, where, null,null);
if (albumCursor != null && albumCursor.moveToFirst()) {
int albumColumn = albumCursor.getColumnIndex(MediaStore.Audio.Albums._ID);
do {
long thisAlbum = albumCursor.getLong(albumColumn);
Bitmap album = BitmapFactory.decodeFile(getCoverArtPath(thisAlbum, getActivity()));
if (album == null) {
continue;
}
albumList.add(album);
} while (albumCursor.moveToNext());
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
albumAdapter.notifyDataSetChanged();
}
});
}
}
}.start();

这是我使用的getCoverArtPath((方法 -

private static String getCoverArtPath(long albumId, Context context) {
Cursor albumCursor = context.getContentResolver().query(
MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID + " = ?",
new String[]{Long.toString(albumId)},
null
);
boolean queryResult = albumCursor.moveToFirst();
String result = null;
if (queryResult) {
result = albumCursor.getString(0);
}
albumCursor.close();
return result;
}

请帮帮我。我是安卓编程的新手。

在返回结果之前,您已关闭光标 ---> albumCursor.close((; 在返回结果之前--->;

最新更新