Photos missing in Gallery on Android
-
30-09-2019 - |
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.
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;
}
}
}
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