1

我的服务器数据库中有 400 张图像。我能够获取这些图像并在我的模拟器中显示。但是从服务器获取图像需要很多时间。因此我想异步获取图像。我怎样才能完成这项任务?帮我解决这个问题......将提前感谢......

我想将以下代码转换为异步任务......

我的代码:

public View getView(.......)
{
ImageView myimgview = (ImageView) view.findViewById(R.id.imageView100);
drawable = LoadImageFromWebOperations(v.getTag().toString());
myimgview.setImageDrawable(drawable);
---
---
---
}

private Drawable LoadImageFromWebOperations(String url) {
try {
    InputStream is = (InputStream) new URL(url).getContent();
    Drawable d = Drawable.createFromStream(is, "image.png");
    return d;
    }
catch (Exception e) 
{
    System.out.println("Exc=" + e);
    return null;
}
} 
4

3 回答 3

2

简单的解决方案是在java中使用异步任务

听一些例子

    private class DownloadImages AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
    //use your async task hear 
    //in your case call LoadImageFromWebOperations(urls[0])
    }

    @Override
    protected void onPostExecute(String result) {

    }
}

并通过传递所需的图像 url 调用此异步任务

    DownloadImages task = new DownloadImages ();
    task.execute(new String[] { "http://your image url.com" });

听到这个很好的教程

http://www.vogella.com/articles/AndroidPerformance/article.html#asynctask

于 2012-06-24T15:41:28.247 回答
0

我使用Prime来加载我的所有图像,它可以轻松解决这个问题。

于 2012-06-24T14:34:50.313 回答
0

您可以将线程与处理程序结合使用:

public void setImageInThread(final ImageView imageView, final String url) {
    final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message message) {
            Drawable result = (Drawable) message.obj;
            imageView.setImageDrawable(result);
        }
    };

    new Thread() {
        @Override
        public void run() {
            Drawable drawable = getDrawable(url);
            Message message = handler.obtainMessage(1, drawable);
            handler.sendMessage(message);
        }
    }.start();
}

getDrawable 是您同步获取图像的函数。

于 2012-06-24T15:09:52.890 回答