Intereting Posts
Является ли ArrayAdapter потоком безопасным в android? Если нет, что я могу сделать, чтобы сделать его потокобезопасным? Камера не работает, если клавиатура не открыта Настройки оптимизации Proguard: включение слияния классов, трансляции и поля / * в современных API и версиях Proguard Ошибка: не удалось открыть zip-файл. Кэш зависимостей Gradle может быть поврежден Проверить, что база данных sqlite открыта или закрыта в android Добавление дополнительных изображений / значков в CardFragment (Android Wear) Является ли конструктором частного внутреннего класса также частным? StartActivity () из BroadcastReceiver Как я могу запустить Onclick событие программно в android? Кордоба добавить платформу – Ошибка выполнения команды 'ant' Добавление базы данных / backend в приложения для Android Управление фонариком в Зефир Использует ли «Избегайте базиса инъекций зависимостей» в Руководстве по памяти Android для кинжала? Android-подборщик для Android, который будет включен в активность Реагировать Нативный адд обратный ENOENT

Как загрузить ImageView по URL в Android?

Как вы используете изображение, на которое ссылается URL-адрес в ImageView ?

Solutions Collecting From Web of "Как загрузить ImageView по URL в Android?"

От разработчика Android :

 // show The Image in a ImageView new DownloadImageTask((ImageView) findViewById(R.id.imageView1)) .execute("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"); public void onClick(View v) { startActivity(new Intent(this, IndexActivity.class)); finish(); } private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urldisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } } 

Убедитесь, что в вашем AndroidManifest.xml установлены следующие разрешения для доступа в Интернет.

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

Сначала вам нужно загрузить изображение

 public static Bitmap loadBitmap(String url) { Bitmap bitmap = null; InputStream in = null; BufferedOutputStream out = null; try { in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE); final ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE); copy(in, out); out.flush(); final byte[] data = dataStream.toByteArray(); BitmapFactory.Options options = new BitmapFactory.Options(); //options.inSampleSize = 1; bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options); } catch (IOException e) { Log.e(TAG, "Could not load Bitmap from: " + url); } finally { closeStream(in); closeStream(out); } return bitmap; } 

Затем используйте Imageview.setImageBitmap для установки растрового изображения в ImageView

1. Picasso позволяет без проблем загружать изображения в ваше приложение – часто в одной строке кода!

Использовать Gradle:

 compile 'com.squareup.picasso:picasso:2.5.2' 

Всего одна строка кода!

 Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

Многие распространенные ошибки загрузки изображений на Android автоматически обрабатываются Picasso

  • Обработка утилиты ImageView и отмена загрузки в адаптере.
  • Комплексные преобразования изображений с минимальным использованием памяти.
  • Автоматическое кэширование памяти и дисков.

Введите описание изображения здесь

2. Glide. Библиотека загрузки изображений и кеширования для Android ориентирована на плавную прокрутку

Использовать Gradle:

 repositories { mavenCentral() // jcenter() works as well because it pulls from Maven Central } dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:19.1.0' } 

// Для простого представления:

 @Override public void onCreate(Bundle savedInstanceState) { ... ImageView imageView = (ImageView) findViewById(R.id.my_image_view); Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView); } 

// Для простого списка изображений:

  @Override public View getView(int position, View recycled, ViewGroup container) { final ImageView myImageView; if (recycled == null) { myImageView = (ImageView) inflater.inflate(R.layout.my_image_view, container, false); } else { myImageView = (ImageView) recycled; } String url = myUrls.get(position); Glide .with(myFragment) .load(url) .centerCrop() .placeholder(R.drawable.loading_spinner) .crossFade() .into(myImageView); return myImageView; } 

Я написал класс, чтобы справиться с этим, поскольку это, кажется, повторяющаяся потребность в моих различных проектах:

https://github.com/koush/UrlImageViewHelper

UrlImageViewHelper заполнит ImageView с изображением, которое находится по URL-адресу.

Образец будет выполнять поиск изображений Google и загрузить / показать результаты асинхронно.

UrlImageViewHelper автоматически загружает, сохраняет и кэширует все изображения, обращаясь к BitmapDrawables. Дублирующие URL-адреса не будут загружаться в память дважды. Память растрового изображения управляется с использованием слабой справочной хеш-таблицы, поэтому, как только изображение больше не будет использоваться вами, это будет автоматически собираться мусором.

В любом случае люди просят мой комментарий, чтобы опубликовать его в качестве ответа. Я отправляю сообщения.

 URL newurl = new URL(photo_url_str); mIcon_val = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); profile_photo.setImageBitmap(mIcon_val); 

Благодарю.

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

Чтобы использовать asynctask, добавьте этот класс в конце вашей деятельности:

 private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(String... urls) { String urldisplay = urls[0]; Bitmap mIcon11 = null; try { InputStream in = new java.net.URL(urldisplay).openStream(); mIcon11 = BitmapFactory.decodeStream(in); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return mIcon11; } protected void onPostExecute(Bitmap result) { bmImage.setImageBitmap(result); } } 

И вызов из метода onCreate (), используя:

 new DownloadImageTask((ImageView) findViewById(R.id.imageView1)) .execute(MY_URL_STRING); 

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

Вы также можете использовать это изображение LoadImageView для загрузки изображения с URL-адреса:

http://blog.blundellapps.com/imageview-with-loading-spinner/

После того, как вы добавили файл класса из этой ссылки, вы можете создать экземпляр изображения с URL-адресами:

В xml:

 <com.blundell.tut.LoaderImageView android:id="@+id/loaderImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" image="http://developer.android.com/images/dialog_buttons.png" /> 

В коде:

 final LoaderImageView image = new LoaderImageView(this, "http://developer.android.com/images/dialog_buttons.png"); 

И обновите его, используя:

 image.setImageDrawable("http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"); 
 public class LoadWebImg extends Activity { String image_URL= "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView bmImage = (ImageView)findViewById(R.id.image); BitmapFactory.Options bmOptions; bmOptions = new BitmapFactory.Options(); bmOptions.inSampleSize = 1; Bitmap bm = LoadImage(image_URL, bmOptions); bmImage.setImageBitmap(bm); } private Bitmap LoadImage(String URL, BitmapFactory.Options options) { Bitmap bitmap = null; InputStream in = null; try { in = OpenHttpConnection(URL); bitmap = BitmapFactory.decodeStream(in, null, options); in.close(); } catch (IOException e1) { } return bitmap; } private InputStream OpenHttpConnection(String strURL) throws IOException{ InputStream inputStream = null; URL url = new URL(strURL); URLConnection conn = url.openConnection(); try{ HttpURLConnection httpConn = (HttpURLConnection)conn; httpConn.setRequestMethod("GET"); httpConn.connect(); if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) { inputStream = httpConn.getInputStream(); } } catch (Exception ex) { } return inputStream; } } 

Недавно я нашел здесь поток, так как мне нужно сделать аналогичную вещь для списка с изображениями, но принцип прост, так как вы можете прочитать в первом примере, показанном там (by jleedev). Вы получаете входной поток изображения (из Интернета)

 private InputStream fetch(String urlString) throws MalformedURLException, IOException { DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet request = new HttpGet(urlString); HttpResponse response = httpClient.execute(request); return response.getEntity().getContent(); } 

Затем вы сохраняете изображение как Drawable, и вы можете передать его в ImageView (через setImageDrawable). Опять же из верхнего фрагмента кода взгляните на весь поток.

 InputStream is = fetch(urlString); Drawable drawable = Drawable.createFromStream(is, "src"); 

Привет, у меня самый простой код, попробуйте это

  public class ImageFromUrlExample extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ImageView imgView =(ImageView)findViewById(R.id.ImageView01); Drawable drawable = LoadImageFromWebOperations("http://www.androidpeople.com/wp-content/uploads/2010/03/android.png"); imgView.setImageDrawable(drawable); } private Drawable LoadImageFromWebOperations(String url) { try{ InputStream is = (InputStream) new URL(url).getContent(); Drawable d = Drawable.createFromStream(is, "src name"); return d; }catch (Exception e) { System.out.println("Exc="+e); return null; } } } 

main.xml

  <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:id="@+id/ImageView01" android:layout_height="wrap_content" android:layout_width="wrap_content"/> 

попробуй это

Здесь много хорошей информации … Недавно я нашел класс под названием SmartImageView, который пока работает очень хорошо. Очень легко включать и использовать.

http://loopj.com/android-smart-image-view/

https://github.com/loopj/android-smart-image-view

ОБНОВЛЕНИЕ : я закончил тем, что написал сообщение в блоге об этом , поэтому ознакомьтесь с его помощью по использованию SmartImageView.

2ND UPDATE : теперь я всегда использую Picasso для этого (см. Выше) и очень рекомендую его. 🙂

 imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside 

Лучшей современной библиотекой для такой задачи, по моему мнению, является Пикассо на площади. Он позволяет загружать изображение в ImageView по URL-адресам с помощью одного слоя:

 Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

Это поможет вам …

Определите изображение и загрузите изображение в него …..

 Imageview i = (ImageView) vv.findViewById(R.id.img_country); i.setImageBitmap(DownloadFullFromUrl(url)); 

Затем Определите этот метод:

  public Bitmap DownloadFullFromUrl(String imageFullURL) { Bitmap bm = null; try { URL url = new URL(imageFullURL); URLConnection ucon = url.openConnection(); InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } bm = BitmapFactory.decodeByteArray(baf.toByteArray(), 0, baf.toByteArray().length); } catch (IOException e) { Log.d("ImageManager", "Error: " + e); } return bm; } 
  private Bitmap getImageBitmap(String url) { Bitmap bm = null; try { URL aURL = new URL(url); URLConnection conn = aURL.openConnection(); conn.connect(); InputStream is = conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); bm = BitmapFactory.decodeStream(bis); bis.close(); is.close(); } catch (IOException e) { Log.e(TAG, "Error getting bitmap", e); } return bm; } 

Простой и чистый способ сделать это – использовать библиотеку с открытым исходным кодом Prime .

  String img_url= //url of the image URL url=new URL(img_url); Bitmap bmp; bmp=BitmapFactory.decodeStream(url.openConnection().getInputStream()); ImageView iv=(ImageView)findviewById(R.id.imageview); iv.setImageBitmap(bmp); 

Этот код проверен, он полностью работает.

 URL req = new URL( "http://java.sogeti.nl/JavaBlog/wp-content/uploads/2009/04/android_icon_256.png" ); Bitmap mIcon_val = BitmapFactory.decodeStream(req.openConnection() .getInputStream()); 

Работа с графическим изображением в любом контейнере, например, в виде сетки в виде списка, обычная компоновка

  private class LoadImagefromUrl extends AsyncTask< Object, Void, Bitmap > { ImageView ivPreview = null; @Override protected Bitmap doInBackground( Object... params ) { this.ivPreview = (ImageView) params[0]; String url = (String) params[1]; System.out.println(url); return loadBitmap( url ); } @Override protected void onPostExecute( Bitmap result ) { super.onPostExecute( result ); ivPreview.setImageBitmap( result ); } } public Bitmap loadBitmap( String url ) { URL newurl = null; Bitmap bitmap = null; try { newurl = new URL( url ); bitmap = BitmapFactory.decodeStream( newurl.openConnection( ).getInputStream( ) ); } catch ( MalformedURLException e ) { e.printStackTrace( ); } catch ( IOException e ) { e.printStackTrace( ); } return bitmap; } /** Usage **/ new LoadImagefromUrl( ).execute( imageView, url ); 

Версия с обработкой исключений и задачей async:

 AsyncTask<URL, Void, Boolean> asyncTask = new AsyncTask<URL, Void, Boolean>() { public Bitmap mIcon_val; public IOException error; @Override protected Boolean doInBackground(URL... params) { try { mIcon_val = BitmapFactory.decodeStream(params[0].openConnection().getInputStream()); } catch (IOException e) { this.error = e; return false; } return true; } @Override protected void onPostExecute(Boolean success) { super.onPostExecute(success); if (success) { image.setImageBitmap(mIcon_val); } else { image.setImageBitmap(defaultImage); } } }; try { URL url = new URL(url); asyncTask.execute(url); } catch (MalformedURLException e) { e.printStackTrace(); } 

Попробуйте этот путь, надеюсь, что это поможет вам решить вашу проблему.

Здесь я расскажу о том, как использовать внешнюю библиотеку «AndroidQuery» для загрузки изображения с url / server в режиме asyncTask, а также загружать кэшированное изображение в файл устройства или область кеша.

  • Загрузите библиотеку «AndroidQuery» здесь
  • Скопируйте / Вставьте эту банку в папку проекта lib и добавьте эту библиотеку в путь сборки проекта
  • Теперь я показываю демонстрацию того, как ее использовать.

activity_main.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/imageFromUrl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true"/> <ProgressBar android:id="@+id/pbrLoadImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </FrameLayout> </LinearLayout> 

MainActivity.java

 public class MainActivity extends Activity { private AQuery aQuery; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); aQuery = new AQuery(this); aQuery.id(R.id.imageFromUrl).progress(R.id.pbrLoadImage).image("http://itechthereforeiam.com/wp-content/uploads/2013/11/android-gone-packing.jpg",true,true); } } Note : Here I just implemented common method to load image from url/server but you can use various types of method which can be provided by "AndroidQuery"to load your image easily. 

Android Query может справиться с этим для вас и многое другое (например, прохождение кеша и загрузки).

Взгляните сюда .

Я думаю, что это лучший подход.

Это поздний ответ, как было предложено выше. AsyncTask будет и после того, как я AsyncTask немного, я нашел еще один способ для этой проблемы.

 my_image_view.setImageDrawable(Drawable.createFromStream((InputStream)new URL(<String_url>).getContent(), "src")); 

Я попробовал это сам, и у меня еще нет проблем.