2012-07-26 2 views
1

PHP 및 MySQL 데이터베이스에서 이미지 URL을 가져옵니다. Log.d에 유효한 이미지 URL이 표시된 결과가 표시되므로 여기에 나온 내용은 ​​모두 문제가되지 않습니다. 지정된 URL에서 이미지를 가져오고 비트 맵으로 반환이 아래 다른 클래스에 ArrayList <Bitmap>을 전달하고 비트 맵 []으로 변환


if (success == 1) { 
    JSONArray comments = json.getJSONArray("photos"); 
    for (int i = 0; i < comments.length(); i++) { 
     JSONObject m = comments.getJSONObject(i); 
     final String filename = m.getString("filename"); 
     final String extension = m.getString("extension"); 
     String upload_at = m.getString("upload_at"); 
     String uid = m.getString("uid"); 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Bitmap mThumbIds = fetchImage(filepath_min 
       + filename + "." + extension); 
     Log.d("Photo URL", filepath_min + filename + "." + extension); 
       List<Bitmap> l = Arrays.asList(mThumbIds); 
       photoList = new ArrayList<Bitmap>(l); 
      } 
     }); 
    } 
} 

// Instance of ImageAdapter Class 
mHandler.postDelayed((new Runnable() { 
    public void run() { 
     imgGrid.setAdapter(new ImageAdapter(
     PhotoViewerActivity.this, photoList)); 
    } 
}), 1000); 

. 여기에 아무런 문제가 없습니다. 참조 용으로는 반환 값이 Bitmap임을 보여주고 싶습니다.
public Bitmap fetchImage(String urlstr) { 
    try { 
     URL url; 
     url = new URL(urlstr); 

     HttpURLConnection c = (HttpURLConnection) url.openConnection(); 
     c.setDoInput(true); 
     c.connect(); 
     InputStream is = c.getInputStream(); 
     Bitmap img; 
     img = BitmapFactory.decodeStream(is); 
     return img; 
     } catch (MalformedURLException e) { 
     Log.d("RemoteImageHandler", "fetchImage passed invalid URL: " 
     + urlstr); 
     } catch (IOException e) { 
     Log.d("RemoteImageHandler", "fetchImage IO exception: " + e); 
    } 
    return null; 
} 


이의 GridView에서 이미지를보기위한 내 ImageAdapter입니다

.


public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    List<Bitmap> list = new ArrayList<Bitmap> l; 

    public ImageAdapter(Context c, ArrayList<Bitmap> l) { 
     mContext = c; 
     list = l; 
    } 

    public Bitmap[] mThumbIds = list.toArray(new Bitmap[list.size()]); 

    @Override 
    public int getCount() { 
     return mThumbIds.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return mThumbIds[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView = new ImageView(mContext); 
     imageView.setImageBitmap(mThumbIds[position]); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setLayoutParams(new GridView.LayoutParams(130, 130)); 
     return imageView; 
    } 

} 

여기 내 문제입니다. 활동에 이미지가 표시되지 않았습니다. 비트 맵 [] mThumbIds에서 가져 오기 배열을 사용하여 하드 코드 된 URL을 시도하면 성공했습니다.

Bitmap[] mThumbIds = { fetchImage("http://...jpg"), 
         fetchImage("http://...jpg") } 

무엇이 잘못 되었나요? ArrayList 배열로 변환하려면 Bitmap[] mThumbIds = list.toArray(new Bitmap[list.size()]); 시도했다.

+0

'비트 맵'의'Array'를 보내 주어야 할 이유가 있습니까? 왜 URL의 배열을 보내고 어댑터에 이미지를로드하는 것 (지연로드)이 아닌가? 'Array'의 비트 맵은 메모리에 많이 있습니다. –

+0

그래서 String URL 배열을 보내고 ImageAdapter 클래스 내에 이미지를 가져 오는 것을 의미합니까? 좋아, 나는 그것을 시도한다. – Faizal

답변

0

위에서 볼 수 있듯이 mThumbIds는 runOnUiThread 메소드의 비트 맵 배열이 아닌 일반 비트 맵으로 선언되어 있습니다.

Bitmap mThumbIds = fetchImage(filepath_min + filename + "." + extension); 

당신이 충돌하는 변수 이름을 해달라고 그래서 그렇지 않으면 비트 맵 배열에 대한 다른 변수 이름을 사용

Bitmap[] mThumbIds = fetchImage(filepath_min + filename + "." + extension); 

로 변경합니다.

+0

답장을 보내 주셔서 감사합니다. 'runOnUiThread'의'Bitmap mThumbIds'는 아직 배열이 아닙니다. 그런 다음 배열리스트로 넣습니다 :'List l = Arrays.asList (thumbs); photoList = new ArrayList (l);'다른 변수 이름을 사용하려고했지만 아무 일도 일어나지 않았습니다. – Faizal

+0

그 시점에서 M Moshin Naeem과 동의해야합니다.처음부터 ArrayList로 만들면 더 쉽고 더 친숙해질 수 있으므로 더 많은 배열을 만들 필요가 없습니다. 거기에 왜 ArrayList를 ArrayList로 변환하려고하는 이유가 있습니까? –

+0

나는이 안드로이드 배열 것들을 정말로 모른다. 일부는'Array','List','ArrayList'입니다. – Faizal

0

가는 어댑터에주는 URL의 ArrayList입니다 imageView.setImageResource(mThumbIds[position]);

데이터 여기

imageLoader.DisplayImage(data.get(position), imageView);로 교체, https://github.com/thest1/LazyList 을 시도하고 LazyAdapter의 "의 getView"단지 작은 변화 .

ImageLoader 클래스에는 원하는대로 비트 맵의 ​​크기를 private Bitmap decodeFile(File f)으로 설정하는 메서드가 있습니다.

+0

'단지 작은 변화 '- 코드와 함께 작은 변화를 descibe하는 것이 낫습니다. –

관련 문제