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

Android 从url下载图像并显示在列表视图中,android,Android,我从一个在线xml文件中获取标题、日期和图像,并将其存储在arraylist中。我使用了3种不同的数组列表来存储标题、日期和图像 我成功地获得了图像url,我的问题是如何从url下载图像并在imageview中显示。获取url的代码如下所示 if((xpp_name.equals("content"))) { xpp.next(); strvalue=xpp.getText();

我从一个在线xml文件中获取标题、日期和图像,并将其存储在arraylist中。我使用了3种不同的数组列表来存储标题、日期和图像

我成功地获得了图像url,我的问题是如何从url下载图像并在imageview中显示。获取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();}                                                                                                                    
您可以找到一个延迟加载库,从URL下载图像并在
列表视图中显示它们。另外,我建议您避免使用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;
}
}
下面是一个示例用法,我使用一个
ImageObject
启动一个
ArrayList

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

启动从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();

试试这个最好的图像加载库


检查此项尝试此项用于listview使用惰性加载谢谢Srikanth、OMAK和Naveenas@Angelo说您也可以使用惰性加载程序。这是一个加载更多图像的好主意。@Akhilesh:谢谢你的回复,我也在尝试实现它。@Angelo谢谢你的回复,你能解释一下如何只使用一个arraylist来完成上面的操作吗?@user1740281我已经用一个示例类更新了答案。希望有帮助:)@Angelo:非常感谢,我一定会在我的应用程序中实现lazyload和ImageObject类。@user1740281很高兴我能提供帮助:)
  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);