我有一些图像路径存储在数据库中,我必须以网格布局显示图像。 这是我的代码
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;
}
}
请帮助我 感谢
答案 0 :(得分:0)
答案 1 :(得分:0)
我无法理解你是否已经有列表为什么你创建了一个附加“,”然后再次拆分它,导致问题的原因是你的字符串末尾有一个“,”导致添加空数据,BTW尝试下面的代码可能会有所帮助,将您的onCreate
更改为低于一
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);
}
}