从URL下载图像并显示在列表视图中

问题描述:

我从一个在线XML文件中提取标题,日期和图像并将其存储在一个数组列表中。我采用了3种不同的数组列表来存储标题,日期和图像。从URL下载图像并显示在列表视图中

我成功地获取图像网址,我的问题是如何从网址下载图像并将其显示在图像视图中。下面是获取url的代码。

if((xpp_name.equals("content"))) 
    {             
xpp.next(); 
    strvalue=xpp.getText(); 
    if(strvalue!=null){ 
     String url = strvalue.substring(
        strvalue.indexOf("src")+5,, strvalue.indexOf("jpg")+3); 
    arrayList_for_images.add(url); 
    } 
    xpp.next();  
    xpp.next();}                              
+0

检查此[SO](http://stackoverflow.com/questions/12161137/android-download-image-from-url-and-show-in-imageview) –

+0

尝试此http:/ /stackoverflow.com/a/16560535/1911784 – OMAK

+0

对于listview使用懒加载http://stackoverflow.com/questions/541966/how-do-i-do-a-lazy-load-of-images-in-listview –

Here你可以找到一个延迟加载库来从URL下载图像,并显示在一个ListView。此外,我建议你避免使用3个不同的Arraylists,而只使用一个ArrayList,而用一个用于存储图像信息(标题,日期和图像url)的自定义类。

编辑:下面是一个例子类,用于保存所需图像的信息:

import java.util.Date; 

public class ImageObject { 

    private String image_name; 
    private String image_url; 
    private Date image_date; 

public ImageObject() { 
} 

public ImageObject(String image_name, String image_url, Date image_date) { 

    this.image_name = image_name; 
    this.image_url = image_url; 
    this.image_date = image_date; 
} 

public void setImageName(String image_name) { 

    this.image_name = image_name; 
} 

public void setImageURL(String image_url) { 

    this.image_url = image_url; 
} 

public void setImageDate(Date image_date) { 

    this.image_date = image_date; 
} 


public String getImageName() { 

    return this.image_name; 
} 

public String getImageURL() { 

    return this.image_url; 
} 

public Date getImageDate() { 

    return this.image_date; 
} 
} 

下面是在女巫的示例用法我发起ArrayList与一个ImageObject

ArrayList<ImageObject> data = new ArrayList<ImageObject>(); 
ImageObject obj = new ImageObject("test.jpg", "www.imageurl.com", new Date()); 
data.add(obj); 

这就是如何从某个ImageObject对象中检索一个值:ArrayList

data.get(0).getImageName(); 
+0

@ Angelo谢谢你的回复,你能解释一下如何使用一个数组列表来完成上述任务吗? – user1740281

+0

@ user1740281我已经用示例类更新了答案。希望有所帮助:) – Angelo

+0

@ Angelo:非常感谢,我一定会在我的应用中实现lazyload和ImageObject类。 – user1740281

启动一个用于从Url下载图片的新线程,并在处理程序中的imageview中设置图像。

private Bitmap pop_up_image_bitmap ; 
    private Handler handler ; 
    private Runnable r; 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      URL newurl; 
      try { 
       newurl = new URL(<Url>); 
       pop_up_image_bitmap = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); 
       handler.post(r); 
      } catch (MalformedURLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


     } 
    }).start(); 

认沽处理程序:

handler = new Handler(); 
    r = new Runnable() 
    { 
     public void run() 
     { 
      if(pop_up_image_bitmap!=null){ 
      imageview.setImageBitmap(pop_up_image_bitmap); 
      handler.postDelayed(this, 1000); 
      popUpImageProgressBar.setVisibility(View.INVISIBLE); 
      } 
     } 
    }; 

    handler.postDelayed(r, 1000); 
+0

正如@安杰洛所说,你也可以使用懒加载程序。这是加载更多图像的好主意。 –

+0

@ Akhilesh:谢谢你的回复,我也试图实现这一点。 – user1740281

尝试这个最佳的图像加载库如初。

https://github.com/nostra13/Android-Universal-Image-Loader