2011-10-21 15 views
2

私は次のように試していますが、iv.setImageBitmap(bm)でNull Pointer Exceptionを取得しています。 グリッドビューとLayout Inflaterを使用してテキストでイメージを設定しようとしました。プロセスもデバッグしましたが、解決策を得ることができませんでした。次のコードを確認してください。あなたのアダプタでのURLConnectionを行うべきではありませんグリッドビューでそれ以下のテキストでイメージを設定するにはどうすればいいですか?

public class CategoryAdapter extends BaseAdapter { 
private Context mContext; 
public static final int ACTIVITY_CREATE = 10; 
int id=-1; 
public CategoryAdapter(Context c) { 
     mContext = c; 
} 
public int getCount() { 
    return CategorylogoActivity.logoarray.length; 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
     Bitmap bm=null; 
     ImageView iv = null ; 
     TextView tv=null; 
     View v; 
        if(convertView==null){ 

         @SuppressWarnings("static-access") 
         LayoutInflater li = (LayoutInflater)mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE); 

         v = li.inflate(R.layout.category_icon, null); 
         tv= (TextView)v.findViewById(R.id.icon_text); 

         iv = (ImageView)v.findViewById(R.id.icon_image); 


        } 
        else 
        { 
         v = convertView; 
        } 
         try { 
          URL aURL = new URL(CategorylogoActivity.logoarray[position]); 
          URLConnection conn = aURL.openConnection(); 
          conn.connect(); 
          InputStream is = conn.getInputStream(); 
          // Buffered is always good for a performance plus. 
          BufferedInputStream bis = new BufferedInputStream(is); 
          // Decode url-data to a bitmap. 
          bm = BitmapFactory.decodeStream(bis); 

          bis.close(); 
          is.close(); 
         } catch (MalformedURLException e) { 

          e.printStackTrace(); 
         } catch (IOException e) { 

          e.printStackTrace(); 
         } 
        iv.setImageBitmap(bm); 
        tv.setText(CategorylogoActivity.namearray[0]); 

        return v; 

答えて

0
static class viewHolder { 
     ImageView iv = null ; 
     TextView tv=null; 
} 


public View getView(int position, View convertView, ViewGroup parent) { 
     Bitmap bm=null; 
     viewHolder vh; 
     View v; 
        if(convertView==null){ 
         vh = new viewHolder(); 
         @SuppressWarnings("static-access") 
         LayoutInflater li = (LayoutInflater)mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE); 


         v = li.inflate(R.layout.category_icon, null); 
         vh.tv= (TextView)v.findViewById(R.id.icon_text); 

         vh.iv = (ImageView)v.findViewById(R.id.icon_image); 

         v.setTag(vh); 
        } 
        else 
        { 
         vh = (viewHolder)convertView.getTag(); 
         v = convertView; 
        } 
         try { 
          URL aURL = new URL(CategorylogoActivity.logoarray[position]); 
          URLConnection conn = aURL.openConnection(); 
          conn.connect(); 
          InputStream is = conn.getInputStream(); 
          // Buffered is always good for a performance plus. 
          BufferedInputStream bis = new BufferedInputStream(is); 
          // Decode url-data to a bitmap. 
          bm = BitmapFactory.decodeStream(bis); 

          bis.close(); 
          is.close(); 
         } catch (MalformedURLException e) { 

          e.printStackTrace(); 
         } catch (IOException e) { 

          e.printStackTrace(); 
         } 
        vh.iv.setImageBitmap(bm); 
        vh.tv.setText(CategorylogoActivity.namearray[0]); 

        return v; 

オブジェクトのviewHolderを使用する必要があります。convertViewがnullでない場合、iv imageViewはnullです。 nullオブジェクトに対してsetImageBitmap()を使用しています。私のコードを試してください。

HTH。

+0

私の質問に素早く正確に答えてくれてありがとう。ありがとうallot.I TSはあなたのコードで正しく働いています。 –

0

が、これは、倍数接続を実行しようと、あなたのアダプタでそのビューを表示するたびに呼び出されます()getViewメソッドが発生します。代わりに、別のクラスの接続を処理します。

関連する問題