Android上的图库中缺少照片

时间:2010-12-03 01:27:33

标签: android gallery

我只是写了一个小测试应用程序,在Android上显示图像库(从SD卡),除了我看到照片的部分外,它都运行得很好。如果有人能发现我的麻烦来源......

大部分代码都是从我发现的各种例子中复制和粘贴的。

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

请注意图库中缺少图像。

我猜我在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;
    }

整个活动如下 - 如果问题出在其他地方

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

1 个答案:

答案 0 :(得分:0)

好的解决方案是相当明显的 - 如果我对Java更熟悉,我可能会立即发现它。

而不是

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

我应该有

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