Android load from URL to Bitmap
public static Bitmap getBitmapFromURL(String src) { try { URL url = new URL(src); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (IOException e) { // Log exception return null; }}
If you are using Picasso or Glide or Universal-Image-Loader for load image from url.
You can simply get the loaded bitmap by
For Picasso (current version 2.71828
)
Java code
Picasso.get().load(imageUrl).into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { // loaded bitmap is here (bitmap) } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) {}});
Kotlin code
Picasso.get().load(url).into(object : com.squareup.picasso.Target { override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { // loaded bitmap is here (bitmap) } override fun onPrepareLoad(placeHolderDrawable: Drawable?) {} override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {}})
For Glide
Check How does one use glide to download an image into a bitmap?
For Universal-Image-Loader
Java code
imageLoader.loadImage(imageUrl, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { // loaded bitmap is here (loadedImage) }});
I Prefer these one:
Creates Bitmap from InputStream and returns it:
public static Bitmap downloadImage(String url) { Bitmap bitmap = null; InputStream stream = null; BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inSampleSize = 1; try { stream = getHttpConnection(url); bitmap = BitmapFactory.decodeStream(stream, null, bmOptions); stream.close(); } catch (IOException e1) { e1.printStackTrace(); System.out.println("downloadImage"+ e1.toString()); } return bitmap; } // Makes HttpURLConnection and returns InputStream public static InputStream getHttpConnection(String urlString) throws IOException { InputStream stream = null; URL url = new URL(urlString); URLConnection connection = url.openConnection(); try { HttpURLConnection httpConnection = (HttpURLConnection) connection; httpConnection.setRequestMethod("GET"); httpConnection.connect(); if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { stream = httpConnection.getInputStream(); } } catch (Exception ex) { ex.printStackTrace(); System.out.println("downloadImage" + ex.toString()); } return stream; }
REMEMBER :
Android includes two HTTP clients: HttpURLConnection and Apache HTTP Client. For Gingerbread and later, HttpURLConnection is the best choice.
From Android 3.x Honeycomb or later, you cannot perform Network IO on the UI thread and doing this throws android.os.NetworkOnMainThreadException. You must use Asynctask instead as shown below
/** AsyncTAsk for Image Bitmap */ private class AsyncGettingBitmapFromUrl extends AsyncTask<String, Void, Bitmap> { @Override protected Bitmap doInBackground(String... params) { System.out.println("doInBackground"); Bitmap bitmap = null; bitmap = AppMethods.downloadImage(params[0]); return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { System.out.println("bitmap" + bitmap); } }