Comment charger une image par URL dans Android?

Comment utilisez-vous une image référencée par URL dans un ImageView ?

A partir du développeur Android :

 // show The Image in a ImageView new DownloadImageTask((ImageView) findViewById(R.id.imageView1)) .execute("http://soffr.miximages.com/android/android_icon_256.png"); public void onClick(View v) { startActivity(new Intent(this, IndexActivity.class)); finish(); } private class DownloadImageTask extends AsyncTask { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(Ssortingng... urls) { Ssortingng 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); } } 

Assurez-vous que les permissions suivantes sont définies dans votre AndroidManifest.xml pour accéder à Internet.

  

Vous devrez d’abord télécharger l’image

 public static Bitmap loadBitmap(Ssortingng 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; } 

Ensuite, utilisez Imageview.setImageBitmap pour définir bitmap dans ImageView

1. Picasso permet un chargement d’image sans souci dans votre application – souvent dans une seule ligne de code!

Utilisez Gradle:

 implementation 'com.squareup.picasso:picasso:2.71828' 

Juste une ligne de code!

 Picasso.get().load("http://soffr.miximages.com/android/DvpvklR.jpg").into(imageView); 

2. Glide Une bibliothèque de chargement et de mise en cache d’images pour Android axée sur le défilement fluide

Utilisez Gradle:

 repositories { mavenCentral() google() } dependencies { implementation 'com.github.bumptech.glide:glide:4.7.1' annotationProcessor 'com.github.bumptech.glide:comstackr:4.7.1' } 

// Pour une vue simple:

  Glide.with(this).load("http://soffr.miximages.com/android/DvpvklR.jpg").into(imageView); 

3. fresco est un système puissant pour afficher des images dans les applications Android. Fresco prend en charge le chargement et l’affichage des images, ce qui vous évite de devoir le faire.

Premiers pas avec Fresco

J’ai écrit un cours pour gérer cela, car cela semble être un besoin récurrent dans mes différents projets:

https://github.com/koush/UrlImageViewHelper

UrlImageViewHelper remplira un ImageView avec une image trouvée dans une URL.

L’exemple effectuera une recherche d’image Google et charger / afficher les résultats de manière asynchrone.

UrlImageViewHelper télécharge, enregistre et cache automatiquement toutes les URL de l’image BitmapDrawables. Les URL en double ne seront pas chargées en mémoire deux fois. La mémoire bitmap est gérée à l’aide d’une table de hachage de référence faible, de sorte que dès que l’image ne sera plus utilisée par vous, elle sera automatiquement supprimée.

Quoi qu’il en soit, les gens me demandent de le poster comme réponse. je poste.

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

Merci.

La réponse acceptée ci-dessus est excellente si vous chargez l’image en cliquant sur un bouton, mais si vous le faites dans une nouvelle activité, cela gèle l’interface utilisateur pendant une seconde ou deux. En regardant autour de moi, j’ai trouvé qu’un asynctask simple éliminait ce problème.

Pour utiliser un asynctask, ajoutez cette classe à la fin de votre activité:

 private class DownloadImageTask extends AsyncTask { ImageView bmImage; public DownloadImageTask(ImageView bmImage) { this.bmImage = bmImage; } protected Bitmap doInBackground(Ssortingng... urls) { Ssortingng 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); } } 

Et appelez depuis votre méthode onCreate () en utilisant:

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

Le résultat est une activité rapidement chargée et une image affichée une seconde plus tard, en fonction de la vitesse du réseau de l’utilisateur.

Vous pouvez également utiliser cette vue LoadingImageView pour charger une image depuis une URL:

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

Une fois que vous avez ajouté le fichier de classe à partir de ce lien, vous pouvez instancier une vue d’image URL:

en xml:

  

Dans du code:

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

Et le mettre à jour en utilisant:

 image.setImageDrawable("http://soffr.miximages.com/android/android_icon_256.png"); 
 public class LoadWebImg extends Activity { Ssortingng image_URL= "http://soffr.miximages.com/android/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(Ssortingng 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(Ssortingng 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; } } 

Salut j’ai le code le plus facile essayer ceci

  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://soffr.miximages.com/android/android.png"); imgView.setImageDrawable(drawable); } private Drawable LoadImageFromWebOperations(Ssortingng 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

    

essaye ça

J’ai récemment trouvé un fil de discussion ici , car je dois faire la même chose pour une vue de liste avec des images, mais le principe est simple, comme vous pouvez le lire dans le premier exemple de classe présenté ici (par jleedev). Vous obtenez le stream d’entrée de l’image (à partir du Web)

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

Ensuite, vous stockez l’image en tant que Drawable et vous pouvez la transmettre à ImageView (via setImageDrawable). Encore une fois, à partir de l’extrait de code supérieur, jetez un coup d’œil à l’ensemble du thread.

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

Beaucoup de bonnes informations ici … J’ai récemment trouvé une classe appelée SmartImageView qui semble fonctionner très bien jusqu’à présent. Très facile à incorporer et à utiliser.

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

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

MISE À JOUR : J’ai fini par écrire un article à ce sujet , alors consultez-le pour obtenir de l’aide sur l’utilisation de SmartImageView.

2EME MISE À JOUR : J’utilise maintenant toujours Picasso pour cela (voir ci-dessus) et le recommande fortement. 🙂

Pour moi, la meilleure bibliothèque moderne pour une telle tâche est Picasso by Square. Il permet de charger une image sur une imageView par URL avec un seul pointeur:

 Picasso.with(context).load("http://soffr.miximages.com/android/DvpvklR.jpg").into(imageView); 
 imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside 

Ceci est une réponse tardive, comme suggéré ci-dessus.

Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");

imageView.setImageDrawable(drawable);

Voici la fonction complète:

 public void loadMapPreview () { //start a background thread for networking new Thread(new Runnable() { public void run(){ try { //download the drawable final Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src"); //edit the view in the UI thread imageView.post(new Runnable() { public void run() { imageView.setImageDrawable(drawable); } }); } catch (IOException e) { e.printStackTrace(); } } }).start(); } 

N’oubliez pas d’append les permissions suivantes dans votre AndroidManifest.xml pour accéder à Internet.

Je l’ai essayé moi-même et je n’ai pas encore rencontré de problème.

Cela vous aidera …

Définir imageview et charger l’image dedans …..

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

Ensuite, définissez cette méthode:

  public Bitmap DownloadFullFromUrl(Ssortingng 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(Ssortingng 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; } 

Pour ce faire, vous pouvez utiliser la bibliothèque open source Prime .

  Ssortingng 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); 

Ce code est testé, il fonctionne complètement.

 URL req = new URL( "http://soffr.miximages.com/android/android_icon_256.png" ); Bitmap mIcon_val = BitmapFactory.decodeStream(req.openConnection() .getInputStream()); 

Travailler pour imageView dans n’importe quel conteneur, comme la vue en grid de liste, la mise en page normale

  private class LoadImagefromUrl extends AsyncTask< Object, Void, Bitmap > { ImageView ivPreview = null; @Override protected Bitmap doInBackground( Object... params ) { this.ivPreview = (ImageView) params[0]; Ssortingng url = (Ssortingng) params[1]; System.out.println(url); return loadBitmap( url ); } @Override protected void onPostExecute( Bitmap result ) { super.onPostExecute( result ); ivPreview.setImageBitmap( result ); } } public Bitmap loadBitmap( Ssortingng 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 ); 

Version avec gestion des exceptions et tâche asynchrone:

 AsyncTask asyncTask = new AsyncTask() { 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(); } 

Essayez de cette façon, espérons que cela vous aidera à résoudre votre problème.

Ici, j’explique comment utiliser la bibliothèque externe “AndroidQuery” pour charger l’image à partir d’url / server en asyncTask avec également une image chargée en cache dans un fichier de périphérique ou une zone de cache.

  • Téléchargez la bibliothèque “AndroidQuery” à partir d’ici
  • Copiez / collez ce fichier jar dans le dossier projet lib et ajoutez cette bibliothèque au projet build-path
  • Maintenant, je montre comment l’utiliser.

activity_main.xml

       

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://soffr.miximages.com/android/mjbrender",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 peut gérer cela pour vous et bien plus encore (comme la progression du cache et du chargement).

Regardez ici .

Je pense que c’est la meilleure approche.