2010-12-03 35 views
1

Je viens d'écrire une petite application de test pour montrer une galerie d'images sur Android (à partir de la carte SD), tout fonctionne très bien sauf la partie où je peux voir les photos. Si quelqu'un peut identifier la source de mon problème ...Photos manquantes dans la galerie sur Android

Une grande partie du code a été copiée et collée à partir de divers exemples que j'ai trouvés.

Android Screenshot http://openhomesnz.com/alister/permalink/androidpictures.jpg

Notez l'absence d'images dans la galerie.

Je devine que je fais quelque chose de mal dans 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; 
    } 

Toute l'activité est la suivante - au cas où le problème est ailleurs

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; 
     } 
    } 
} 

Répondre

0

Ok la solution était assez évidente - et si j'étais plus familier avec Java, je l'aurais probablement repéré immédiatement.

Au lieu de

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

j'aurais dû

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