Question

I am just writing a little test application to show a Gallery of images on Android (from the SD card), it all works quite well except the part where I get to see the photos. If someone can spot the source of my trouble.

Much of the code has been copied and pasted from various examples I've found.

Android Screenshot]([[1]

Notice the lack of images in the Gallery.

I'm guessing I'm doing something wrong in getView:

    public View getView(int position, View convertView, ViewGroup parent) {
     ImageView imgView;
     if (convertView == null)
      imgView = new ImageView(cont);
     else
      imgView = (ImageView)convertView;

        String filename = photos[position].getName();
        Log.i(TAG, "Loading File " + filename);
        Bitmap bMap = BitmapFactory.decodeFile(filename);
        imgView.setImageBitmap(bMap);

        imgView.setLayoutParams(new Gallery.LayoutParams(120, 90));
        imgView.setScaleType(ImageView.ScaleType.FIT_XY);
        imgView.setBackgroundResource(GalItemBg);

        return imgView;
    }

The whole activity is as follows - in case the problem is elsewhere

 package nz.co.salespartner.gallerytest;

 import java.io.File;
 import java.io.FilenameFilter;

 import android.app.Activity;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.Gallery;
 import android.widget.ImageView;
 import android.widget.TextView;

 public class GalleryTestActivity extends Activity {
  File photos[];
  private static String TAG = "GalleryTest";
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         File f = new File("/sdcard/pics1");
         photos = f.listFiles(new FilenameFilter() {  
    @Override
    public boolean accept(File dir, String filename) {
     return filename.endsWith("jpg");
    }
   });
         String fileList = "";      
         for (File aFile : photos) {
          fileList += aFile.getName() + "\n";
         }
         TextView v = (TextView)findViewById(R.id.FileList);
         v.setText(fileList);

         Gallery gallery = (Gallery)findViewById(R.id.Gallery);
         gallery.setAdapter(new AddImgAdp(this));
     }

     public class AddImgAdp extends BaseAdapter {
         int GalItemBg;
         private Context cont;

         public AddImgAdp(Context c) {
             cont = c;
             TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme);
             GalItemBg = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0);
             typArray.recycle();
         }

         public int getCount() {
             return photos.length;
         }

         public Object getItem(int position) {
             return position;
         }

         public long getItemId(int position) {
             return position;
         }

         public View getView(int position, View convertView, ViewGroup parent) {
          ImageView imgView;
          if (convertView == null)
           imgView = new ImageView(cont);
          else
           imgView = (ImageView)convertView;

             String filename = photos[position].getName();
             Log.i(TAG, "Loading File " + filename);
             Bitmap bMap = BitmapFactory.decodeFile(filename);
             imgView.setImageBitmap(bMap);

             imgView.setLayoutParams(new Gallery.LayoutParams(120, 90));
             imgView.setScaleType(ImageView.ScaleType.FIT_XY);
             imgView.setBackgroundResource(GalItemBg);

             return imgView;
         }
     }
 }
Was it helpful?

Solution

Okay the solution was fairly obvious - and if I was more familiar with Java I probably would have spotted it immediately.

Instead of

String filename = photos[position].getName();

I should have had

String filename = photos[position].getAbsolutePath();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top