在GridView中显示图片图片、GridView

2023-09-05 05:14:39 作者:野性

我存储在数据库中的一些图片路径,我要显示网格布局的图像。 这里是我的code

I have some image path stored in database and I have to show the image in grid layout. here is my code

public class HeadshotAllPhoto extends Activity 
{
    GridView imagegrid;
    String path,filemanagerstring;
    String[] ImageNameArr;
    String filePath = null;
    String ImageName ;
    Bitmap bitmap;
    DataHelperHeadshot dbHeadshot;

String sub_list ;
String[] pathArr;
Bitmap[] bmp;
ArrayList<String> items = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) 
{   
    super.onCreate(savedInstanceState);
    setContentView(R.layout.headshotallphoto);
    dbHeadshot = new DataHelperHeadshot(this);

    bg = (ImageView)findViewById(R.id.selectHeadshotView);

    List<String> names = this.dbHeadshot.fetchAllHeadshot();
    StringBuilder sb = new StringBuilder();
    for (String name : names)
    { 
       name.trim();
       sb.append(",");
       sb.append(name);
    }   

    bmp = new Bitmap[icount+1];         
    sub_list = sb.toString();    
    Log.i("sub_list .. ",""+sub_list);
    pathArr = sub_list.split(",");      

    for(int p=0;p<pathArr.length;p++)           
    {       
        if(pathArr[p]!=null)
        {               
            bitmap = decodeFile(pathArr[p]);    
            if(bitmap!=null)
            {
                items.add(pathArr[p]);                  
                bmp[p] = bitmap;
            }
        }
        if(pathArr[p] == null)
            break;
    }   

    imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
    imagegrid.setAdapter(new ImageAdapter(getApplicationContext(),bmp));
    imagegrid.setOnItemClickListener(this);     
    }
}

public class ImageAdapter extends BaseAdapter
{
    private Context mContext;       
    Bitmap[] mImageArray;   

    public ImageAdapter(Context c, Bitmap[] imgArray) 
    {
          mContext = c;
          mImageArray = imgArray;             
    }
    public int getCount() 
    {
          return mImageArray.length;
    }
    public Object getItem(int position)
    {
          return position;
    }
    public long getItemId(int position)
    {
          return position;
    }

    public View getView(int position,View convertView,ViewGroup parent)
    {
        System.gc();
        ImageView i = null ;

        if (convertView == null ) 
        {               
            i = new ImageView(mContext);
            i.setLayoutParams(new GridView.LayoutParams(92,92));
            i.setScaleType(ImageView.ScaleType.CENTER_CROP);               
            i.setImageBitmap(mImageArray[position]);                          
        }
         else 
             i = (ImageView) convertView;           
         return i;
    }               
}

public Bitmap decodeFile(String filePath) 
{
    System.out.println("filepath in decode file .. "+filePath);
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, o);

    // The new size we want to scale to
    final int REQUIRED_SIZE = 100;
    final int H = 50;

    // Find the correct scale value. It should be the power of 2.
    int width_tmp = o.outWidth, height_tmp = o.outHeight;
    int scale = 1;
    while (true) {
        if (width_tmp < REQUIRED_SIZE && height_tmp < H)
            break;
        width_tmp /= 2;
        height_tmp /= 2;
        scale *= 2;
    }
    // Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    System.out.println("decode file ........... "+filePath);
    bitmap = BitmapFactory.decodeFile(filePath, o2);    
    return bitmap;
}   
}

请帮我 谢谢

Pls help me Thanks

推荐答案

我无法理解,如果你已经有了,为什么你创建列表中唱追加,,然后再分裂了,是什么原因导致问题是,在你的字符串的结尾有一个,造成无效数据的增加,BTW低于code尝试可能会帮助,改变你的的onCreate 下面一个

I am unable to understand if you already have list why you created a sing appending "," then again splitting it, what causes problem is that at the end of your string there is a "," resulting in adding of null data, BTW try below code might help, change your onCreate with below one

protected void onCreate(Bundle savedInstanceState) 
{   
    super.onCreate(savedInstanceState);
    setContentView(R.layout.headshotallphoto);
    dbHeadshot = new DataHelperHeadshot(this);

    bg = (ImageView)findViewById(R.id.selectHeadshotView);

    List<String> names = this.dbHeadshot.fetchAllHeadshot();
    StringBuilder sb = new StringBuilder();
    for (String name : names)
    { 
       name.trim();
       sb.append(",");
       sb.append(name);
    }   

    bmp = new Bitmap[10+1];           

    for(int p=0;p<names.size();p++)           
    {       
        if(names.get(p) !=null)
        {               
            bitmap = decodeFile(names.get(p));    
            if(bitmap!=null)
            {
                items.add(names.get(p));                  
                bmp[p] = bitmap;
            }
        }
        if(pathArr[p] == null)
            break;
    }   

    imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
    imagegrid.setAdapter(new ImageAdapter(getApplicationContext(),bmp));
    imagegrid.setOnItemClickListener(this);     
    }
}