I am trying to load bitmap image to listview from sdcard but imageview is not showing image.
Here is my code to get image from 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;
}
Code to display Image and text in 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);
}
I have tried to display single image in imageview which works for same code. But for listview i am not getting image. So what should i do??
Pleaze suggest me some solution.
Thanx.
ListViews inflate what you tell them to. You should make an xml layout and call it list_item, in here arrange the ImageView and Textview the way you want. Make sure to set the Containing layout’s height to wrap content.
Now when you are inflating views in your list view, inflate this item you made instead. Then set the textview and imageview in this inflated layout to what you want.
for example in you listview adapter do something similar to this.
you can also set their onclick listener’s here if you want.