2011-05-17 4 views
0

J'ai un certain chemin d'image stocké dans la base de données et je dois montrer l'image dans la disposition de la grille. ici est mon codeAffichage d'images dans GridView

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 me aider Merci

+0

Voici un poste similaire, http://stackoverflow.com/questions/4712945/showing-data-in-gridview-from-database – Mudassir

+0

i chercher le chemin de chaîne à partir de la base de données et mémorisées dans le tableau de bitmap mais j'ai chaque fois que je reçois 1 image supplémentaire nulle. – Monali

+0

Peut me montrer le code? – Mudassir

Répondre

0

Je ne peux pas comprendre si vous avez déjà la liste pourquoi vous avez créé un sing annexant "" alors encore une fois le diviser, ce qui cause problème est qu'à la fin de votre chaîne il ya un "," résultant de l'ajout de données nulles, BTW essayez ci-dessous le code pourrait aider, changer votre onCreate avec b Elow une

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);  
    } 
} 
+0

Merci cela fonctionne pour moi – Monali

+0

Pourriez-vous me dire comment mettre une coche sur l'image que nous cliquons? – Monali

+0

postez comme question séparée et info pertinente à cela – ingsaurabh

Questions connexes