Получение изображения с сервера асинхронно в Android?

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;
}
} 
Теги:

3 ответа

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 - ваша функция для синхронного изображения.

  • 0
    Привет, спасибо за ответ ... Я хочу, чтобы изображение отображалось асинхронно ...
  • 0
    Это асинхронно. Я имею в виду, что функция «getDrawable (url)» - это (синхронная) функция, которая у вас есть в настоящее время. Поскольку он выполняется в потоке, он будет выполняться асинхронно.
Показать ещё 1 комментарий
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

  • 0
    спасибо ... это тоже хорошее решение
0

Я использую Prime для загрузки всего изображения, это легко позаботится об этом.

  • 0
    Спасибо за ответ. Если я хочу показать индикатор выполнения, как я могу это сделать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню