2010-01-02 2 views
3

Как мы можем html.fromhtml загрузить изображение из Интернета и установить его в изображение?android html.fromhtml загрузить изображение из Интернета

+1

Можете ли вы уточнить, если это ваш вопрос? «Как загрузить изображение из Интернета и отобразить его в Android ImageView?» –

+0

Я удалил свой старый ответ и добавил тот, который касается вашего асинхронного требования. Пожалуйста, дай мне знать, если возникнут какие-либо вопросы. – Ally

ответ

11

Asynchronous изображений Загрузка

Первое, что нужно сделать, это убедиться, что вы запрашиваете разрешение на загрузку изображения в файл манифеста.

<uses-permission android:name="android.permission.INTERNET" /> 

Для загрузки изображения из Интернета нам нужно открыть HTTP-соединение, загрузить и вернуть изображение. Этот метод должен войти в действие.

private Bitmap DownloadImage(String URL) 

Тогда мы затем добавить загруженное изображение в ImageView

Bitmap bitmap = DownloadImage("http://www.streetcar.org/mim/cable/images/cable-01.jpg"); 
ImageView img = (ImageView) findViewById(R.id.img); 
img.setImageBitmap(bitmap); 

Однако это не асинхронно.

Обычно мы создавали поток для выполнения фоновой работы, но нить не может обновить представление, которое оно не создало.

Для решения этой проблемы мы можем использовать AsyncTask. Я написал этот маленький внутренний класс, который расширяет AsyncTask.

class DownloadImagesTask extends AsyncTask<String, Integer, Bitmap> { 

private int imageViewID; 

    protected void onPostExecute(Bitmap bitmap1) { 
    setImage(imageViewID, bitmap1); 
} 

    public void setImageId(int imageViewID) { 
     this.imageViewID = imageViewID; 
    } 

    @Override 
    protected Bitmap doInBackground(String... url) { 
     Bitmap bitmap1 = 
      DownloadImage(url[0]); 
     return bitmap1; 
    } 

}

три типа, используемые AsyncTask являются

  1. Params, тип параметров , посланных к задаче при выполнении.
  2. Прогресс, тип единиц прогресса, опубликованных во время вычисления фона.
  3. Результат, тип результата вычисления фона.

Так, чтобы заменить старый код, теперь мы можем использовать

DownloadImagesTask task1 = new DownloadImagesTask(); 
task1.setImageId(R.id.img1); 
task1.execute("http://assets.devx.com/articlefigs/39810_1.jpg"); 

Это получило много больше, чем я планировал. Коды не идеальны, но я надеюсь, что это вам помогло.

Примечание: Это было основано на Connecting to the web на DevX

Ссылки

+0

Это выглядит хорошо, но когда я использую код с настраиваемым списком, в каждом элементе listitem были созданы изображения значков строк и новая задача async для отображения изображения для каждого значка строки. Но изображения не отображаются соответствующим образом Изображение первой строки в изображении второй строки и второй строки в первой строке, почему это происходит, хотя я передаю ссылку на просмотр в asyntask, но все еще имею ту же проблему. –

+0

Итак, ваша начальная проблема решена? Я не совсем уверен, что происходит. Если вы хотите, чтобы я взглянул на вашу новую проблему, отправьте код. :) – Ally

+0

Отличный ответ, спасибо! – Hamy

Смежные вопросы