2012-12-12 58 views
0

我有一个应用程序允许下载3张图片并将它们显示到图库中 为了做到这一点,我使用了一个线程来下载图像和处理程序以便将图像进入画廊从网址获取多个图片

的问题是图像不显示(imageviews是空的),到画廊(即使我看到3 imageview的我的3张图片)

我不知道这是因为连接非常慢(我在移动设备上开发),或者是因为在下载图像之前显示用户界面

非常感谢您的帮助

public class ChoiceLanguage extends Activity { 
    private TextView nomLangue; 

    private ArrayList<Language> listeLangues; 
    private ArrayList<String> listImages; 
    private Gallery gallery; 
    private String URL="******************"; 
    private Drawable mNoImage; 
    Bitmap bitmap; 
    ImageView imgView = null; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.choice_language); 


     listeLangues= getIntent().getParcelableArrayListExtra("listeLangues"); 
     listImages=buildListImages(); 


     gallery = (Gallery) findViewById(R.id.galleryImg); 

     gallery.setAdapter(new AddImgAdp(this)); 

     gallery.setSpacing(10); 


     gallery.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView parent, View v, int position, long id) {    

       System.out.println("URL "+ listImages.get(position)); 
      } 
     }); 


} 

    private InputStream openHttpConnection(String urlString) throws IOException { 
     InputStream in = null; 

     URL url = new URL(urlString); 
     URLConnection conn = url.openConnection(); 
     conn.connect(); 
     in=conn.getInputStream(); 
     return in; 
    } 

    private Bitmap downloadImage(ImageView iView, String url) { 
     Bitmap bitmap = null; 
     InputStream in = null; 
     BufferedInputStream bis ; 
     try { 

      in = openHttpConnection(url); 
      bis= new BufferedInputStream(in, 8192); 
      bitmap = BitmapFactory.decodeStream(bis); 
      bis.close(); 
      in.close(); 

     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     return bitmap; 

    } 


    private ArrayList<String> buildListImages() { 
     ArrayList<String> listImg = new ArrayList<String>(); 
     for(Language l : listeLangues) { 
      listImg.add(URL+l.getImagePath()); 

     } 

     return listImg; 
    } 

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

     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 listImages.size(); 
     } 

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

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

     public View getView(final int position, View convertView, ViewGroup parent) { 

      if (convertView == null) { 
       imgView = new ImageView(cont); 
      } else { 
       imgView = (ImageView)convertView; 
      } 

      ThreadDownload progressDl= new ThreadDownload(position); 
      progressDl.start(); 

      imgView.setLayoutParams(new Gallery.LayoutParams(150, 150)); 
      imgView.setScaleType(ImageView.ScaleType.FIT_XY); 
      imgView.setBackgroundResource(GalItemBg); 

      return imgView; 
     } 
    } 
    private class SetImg extends Handler { 

     public void handleMessage(Message msg) { 

      imgView.setImageBitmap(bitmap); 
     } 
    } 
    private class ThreadDownload extends Thread { 
     SetImg img= new SetImg(); 
     int position ; 
     public ThreadDownload(int position) 
     { 
      super(); 
      this.position=position; 
     } 
     public void run() { 
     bitmap = downloadImage(imgView,listImages.get(position));  
     img.sendEmptyMessage(0); 
     } 
     } 



    } 

回答

1

您可以使用SmartImageView的,它是一个下拉更换为Android标准的ImageView这还允许图像从网址或用户的联系人地址簿被加载。图像缓存到内存和磁盘以实现超快速加载。

https://github.com/loopj/android-smart-image-view

+0

。非常感谢。它运作良好,但由于某种原因,当我尝试更改图像时,图库会冻结并阻止。这个问题在以前的imageview中不存在。你知道为什么吗?谢谢 – ulquiorra