2011-07-25 159 views
0

即时尝试异步下载一些图像在一个异步的,然后在onPostExecute()将图像设置为图库适配器。我已经硬编码的图像被载入asyntask,因为我甚至不能将图像传递给适配器构造函数的部分:/ 没有错误引发,并且后执行Log()不会发布任何内容logcatandroid lazy load gallery问题

有人可以告诉我我哪里错了吗?

公共类GallerythreadedtestActivity延伸活动{

private Gallery gallery; 
private AddImgAdp adapter; 
private Drawable[] image; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    new downloadImages().execute(); 
} 

public class AddImgAdp extends BaseAdapter { 
    int GalItemBg; 
    private Context cont; 

    // Adding images. 
    private Integer[] Imgid = { 
    R.drawable.icon, R.drawable.icon, R.drawable.icon, R.drawable.icon 
    }; 

    public AddImgAdp(Context c) { 
    cont = c; 
    TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme); 
    GalItemBg = typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0); 
    typArray.recycle(); 
    } 

    public int getCount() { 
    return Imgid.length; 
    } 

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

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

    public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imgView = new ImageView(cont); 

    imgView.setImageDrawable(image[position]); 
    // Fixing width & height for image to display 
    imgView.setLayoutParams(new Gallery.LayoutParams(80, 70)); 
    imgView.setScaleType(ImageView.ScaleType.FIT_XY); 
    imgView.setBackgroundResource(GalItemBg); 

    return imgView; 
    } 
    } 

public class downloadImages extends AsyncTask<String, Void, Void> { 

    protected void onPreExecute(){ 
     image=new Drawable[2]; 
     adapter = new AddImgAdp(getApplicationContext()); 
     gallery = (Gallery) findViewById(R.id.examplegallery); 
    } 

    protected void onProgressUpdate(Void... v){ 

    } 

    protected Void doInBackground(final String... args) { 


     image[0] = ImageOperations(getApplicationContext(),"http://t3.gstatic.com/images?q=tbn:ANd9GcQidl6KX2jRWNeCA6jT_TjWG7NlI3aRiB_AcDsA9Y5owS2cr9G6","image.jpg"); 
     image[1] = ImageOperations(getApplicationContext(),"http://t3.gstatic.com/images?q=tbn:ANd9GcQidl6KX2jRWNeCA6jT_TjWG7NlI3aRiB_AcDsA9Y5owS2cr9G6","image.jpg"); 

     return null; 

    } 

    protected void onPostExecute(){ 
     Log.d("onpost",""); 
     gallery.setAdapter(adapter); 
     gallery.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View v, int position, long id) { 
      Toast.makeText(GallerythreadedtestActivity.this, "Position=" + position, Toast.LENGTH_SHORT).show(); 
      } 
      }); 
    } 

} 

private Drawable ImageOperations(Context ctx, String url, String saveFilename) { 
    try { 
     InputStream is = (InputStream) this.fetch(url); 
     Drawable d = Drawable.createFromStream(is, "src"); 
     return d; 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
     return null; 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

public Object fetch(String address) throws MalformedURLException,IOException { 
    URL url = new URL(address); 
    Object content = url.getContent(); 
    return content; 
} 

}

回答

1

我可以给你一个建议也请尝试以此为补充的解决方案,它能够更好延迟加载图像:Lazy load of images in ListView。如果您将xml中的列表视图元素更改为图库视图,我认为这将解决您的问题。