0

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.

Zankhna
  • 4,570
  • 9
  • 62
  • 103
  • I am no sure where you are applying the bitmap, or to what purpose. However in a listview you would set the background as the bitmap. Imageview you can set the background or source, but it is better to set to ImageView source for more displaying options. Basicaly do ListView lv = (ListView)findViewById(r.id...); lv.setbackground something like that – WIllJBD Dec 04 '12 at 08:34
  • I want to display listview wiyh image and text. means in xml i am having imageview and textview. – Zankhna Dec 04 '12 at 08:40

2 Answers2

0

You can achieve your requirement using LazyList Project.

This is the same question has been asked here Hope this may helps :)

Community
  • 1
  • 1
AndroidLearner
  • 4,500
  • 4
  • 31
  • 62
0

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.

@Override
  public View getView(int position, View convertView, ViewGroup parent) {

 if(convertView==null){
   convertView = li.inflatelayout(R.layout.list_item);

    }
    MyListItemModel item = items.get(position);
     // replace those R.ids by the ones inside your custom list_item layout.
     TextView label = (TextView)convertView.findViewById(R.id.item_textview);
     label.setText(text);
     ImageView iv= (Imageview)convertView.findViewById(R.id.item_imageview);
    iv.setsourceimage(bitmap);

    return convertView;
}

you can also set their onclick listener's here if you want.

WIllJBD
  • 6,144
  • 3
  • 34
  • 44