我正在尝试将位图图像从 sdcard 加载到 listview,但 imageview 没有显示图像。
这是我从 SDCard 获取图像的代码:
public static Bitmap getArtwork(Context context, int album_id) {
ContentResolver res = context.getContentResolver();
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
if (uri != null)
{
InputStream in = null;
try
{
in = res.openInputStream(uri);
return BitmapFactory.decodeStream(in, null, sBitmapOptions);
} catch (FileNotFoundException ex)
{
// The album art thumbnail does not actually exist. Maybe the user deleted it, or
// maybe it never existed to begin with.
} finally
{
if (in != null)
{
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return null;
}
在 listview 中显示图像和文本的代码:
public class AlbumList extends ListActivity{
public final ArrayList<HashMap<String, Object>> songsList = new ArrayList<HashMap<String, Object>>();
public final ArrayList<HashMap<String, Object>> songsListData = new ArrayList<HashMap<String, Object>>();
private Context context;
ListAdapter adapter;
private static final BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();
private static final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
//Context contentResolver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
context = this;
final String[] cursor_cols = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.DURATION };
Cursor cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cursor_cols, null, null, null);
if (cursor == null)
{
//Query Failed , Handle error.
}
else if (!cursor.moveToFirst())
{
//No media on the device.
}
else
{
int albumName = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
int id = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
for(int i=0;i<cursor.getCount();i++)
{
String Name = cursor.getString(albumName);
Integer albumid = cursor.getInt(id);
Bitmap bitmap = null;
bitmap = getArtwork(context, albumid);
if(bitmap == null)
{
bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.icon);
}
// ImageView iv = (ImageView) findViewById(R.id.list_image);
// iv.setImageBitmap(bitmap);
HashMap<String, Object> song = new HashMap<String, Object>();
song.put("albumArt", bitmap);
song.put("albumName", Name);
// Adding each song to SongList
songsList.add(song);
cursor.moveToNext();
}
}
cursor.close();
// looping through playlist
for (int i = 0; i < songsList.size(); i++) {
// creating new HashMap
HashMap<String, Object> song = songsList.get(i);
// adding HashList to ArrayList
songsListData.add(song);
}
// Adding menuItems to ListView
String[] from = {"albumArt" , "albumName" };
int[] to={R.id.list_image , R.id.albumName};
adapter = new SimpleAdapter(this, songsListData,R.layout.list_item, from, to);
setListAdapter(adapter);
}
我试图在适用于相同代码的 imageview 中显示单个图像。但是对于 listview 我没有得到图像。所以我该怎么做??请给我一些解决方案。谢谢。