来自Same Server的图像列表

时间:2011-05-20 10:49:38

标签: java android

我正在阅读来自同一服务器的图像列表,但图像名称不同。

for(int i=0;i<moviesL.size();i++)
{
    try
    {
        lName.add(moviesL.get(i).getMovieName());
        URL url = new URL(moviesL.get(i).getImageUrl());
        URLConnection conn = url.openConnection();
        conn.connect();
        InputStream is = conn.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        images.add(BitmapFactory.decodeStream(bis));
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

加载时间太长。

这个问题还有其他问题吗?

1 个答案:

答案 0 :(得分:1)

您可以下载多线程:

首先,您必须创建一个Thread类,用于下载图像并将其存储在图像列表中。

class GetImageThread extends Thread {

    URL url;
    LinkedList<Bitmap> images;

    public GetImageThread(URL url, LinkedList<Bitmap> images) {
        this.url = url;
        this.images = images;
    }

    public void run() {
    try {
        URLConnection conn = this.url.openConnection();
        conn.connect();
        InputStream is = conn.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        this.images.add(BitmapFactory.decodeStream(bis));
    } catch (Exception e) {
        e.printStackTrace();
}

然后你为主程序中的每部电影开始一个主题:

LinkedList<GetImageThread> threads = new LinkedList<GetImageThread>();
for(int i=0;i<moviesL.size();i++) {
    GetImageThread thread = new GetImageThread(moviesL.getImageURL(), images);
    threads.add(thread);
    thread.start();
}

然后你必须等待所有线程完成。

for(GetImageThread thread : threads) {
    thread.join();
}

最后一个提示: 使用迭代器循环而不是int循环总是更好。

for(Movie movie : movies)

而不是

for(int i=0; i<movies.size(); i++)