Load image from url

Android

Android Problem Overview


I have an image URL. I want to display an image from this URL in an ImageView but I am unable to do that.

How can this be achieved?

Android Solutions


Solution 1 - Android

The accepted answer above is great if you are loading the image based on a button click, however if you are doing it in a new activity it freezes up the UI for a second or two. Looking around I found that a simple asynctask eliminated this problem.

To use an asynctask to add this class at the end of your activity:

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

And call from your onCreate() method using:

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

Dont forget to add below permission in your manifest file

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

Works great for me. :)

Solution 2 - Android

URL url = new URL("http://image10.bizrate-images.com/resize?sq=60&uid=2216744464");
Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bmp);

Solution 3 - Android

try picasso nice and finishes in one statement

Picasso.with(context)
                .load(ImageURL)
                .resize(width,height).into(imageView);

tutorial: https://youtu.be/DxRqxsEPc2s

(note: Picasso.with() has been renamed to Picasso.get() in the latest release)

Solution 4 - Android

There is two way :

1) Using Glide library This is best way to load image from url because when you try to display same url in second time it will display from cache so improve app performance

Glide.with(context).load("YourUrl").into(imageView);

dependency : implementation 'com.github.bumptech.glide:glide:4.10.0'


2) Using Stream. Here you want to create bitmap from url image

URL url = new URL("YourUrl");
Bitmap bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream());
imageView.setImageBitmap(bitmap);

Solution 5 - Android

Try this add picasso lib jar file

Picasso.with(context)
				.load(ImageURL)
				.resize(width,height).noFade().into(imageView);

Solution 6 - Android

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;
import android.widget.Toast;

public class imageDownload {

	Bitmap bmImg;
    void downloadfile(String fileurl,ImageView img)
    {
    	URL myfileurl =null;
    	try
    	{
    		myfileurl= new URL(fileurl);
    		
    	}
    	catch (MalformedURLException e)
    	{
    		
    		e.printStackTrace();
    	}

    	try
    	{
    		HttpURLConnection conn= (HttpURLConnection)myfileurl.openConnection();
    		conn.setDoInput(true);
    		conn.connect();
    		int length = conn.getContentLength();
    		int[] bitmapData =new int[length];
    		byte[] bitmapData2 =new byte[length];
    		InputStream is = conn.getInputStream();
    		BitmapFactory.Options options = new BitmapFactory.Options();
    	
    		bmImg = BitmapFactory.decodeStream(is,null,options);
    		
    		img.setImageBitmap(bmImg);
    		
    		//dialog.dismiss();
    		} 
    	catch(IOException e)
    	{
    		// TODO Auto-generated catch block
    		e.printStackTrace();
//    		Toast.makeText(PhotoRating.this, "Connection Problem. Try Again.", Toast.LENGTH_SHORT).show();
    	}

    		
    }
	
	
}

in your activity take imageview & set resource imageDownload(url,yourImageview);

Solution 7 - Android

UrlImageViewHelper will fill an ImageView with an image that is found at a URL. UrlImageViewHelper will automatically download, save, and cache all the image urls the BitmapDrawables. Duplicate urls will not be loaded into memory twice. Bitmap memory is managed by using a weak reference hash table, so as soon as the image is no longer used by you, it will be garbage collected automatically.

UrlImageViewHelper.setUrlDrawable(imageView, "http://example.com/image.png";);

https://github.com/koush/UrlImageViewHelper

Solution 8 - Android

Based on this answer i write my own loader.

With Loading effect and Appear effect :

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;

import java.io.InputStream;

/**
 * Created by Sergey Shustikov ([email protected]) at 2015.
 */
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
    public static final int ANIMATION_DURATION = 250;
    private final ImageView mDestination, mFakeForError;
    private final String mUrl;
    private final ProgressBar mProgressBar;
    private Animation.AnimationListener mOutAnimationListener = new Animation.AnimationListener()
    {
        @Override
        public void onAnimationStart(Animation animation)
        {

        }

        @Override
        public void onAnimationEnd(Animation animation)
        {
            mProgressBar.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationRepeat(Animation animation)
        {

        }
    };
    private Animation.AnimationListener mInAnimationListener = new Animation.AnimationListener()
    {
        @Override
        public void onAnimationStart(Animation animation)
        {
            if (isBitmapSet)
                mDestination.setVisibility(View.VISIBLE);
            else
                mFakeForError.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationEnd(Animation animation)
        {

        }

        @Override
        public void onAnimationRepeat(Animation animation)
        {

        }
    };
    private boolean isBitmapSet;

    public DownloadImageTask(Context context, ImageView destination, String url)
    {
        mDestination = destination;
        mUrl = url;
        ViewGroup parent = (ViewGroup) destination.getParent();
        mFakeForError = new ImageView(context);
        destination.setVisibility(View.GONE);
        FrameLayout layout = new FrameLayout(context);
        mProgressBar = new ProgressBar(context);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        params.gravity = Gravity.CENTER;
        mProgressBar.setLayoutParams(params);
        FrameLayout.LayoutParams copy = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        copy.gravity = Gravity.CENTER;
        copy.width = dpToPx(48);
        copy.height = dpToPx(48);
        mFakeForError.setLayoutParams(copy);
        mFakeForError.setVisibility(View.GONE);
        mFakeForError.setImageResource(android.R.drawable.ic_menu_close_clear_cancel);
        layout.addView(mProgressBar);
        layout.addView(mFakeForError);
        mProgressBar.setIndeterminate(true);
        parent.addView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    }

    protected Bitmap doInBackground(String... urls)
    {
        String urlDisplay = mUrl;
        Bitmap bitmap = null;
        try {
            InputStream in = new java.net.URL(urlDisplay).openStream();
            bitmap = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return bitmap;
    }

    protected void onPostExecute(Bitmap result)
    {
        AlphaAnimation in = new AlphaAnimation(0f, 1f);
        AlphaAnimation out = new AlphaAnimation(1f, 0f);
        in.setDuration(ANIMATION_DURATION * 2);
        out.setDuration(ANIMATION_DURATION);
        out.setAnimationListener(mOutAnimationListener);
        in.setAnimationListener(mInAnimationListener);
        in.setStartOffset(ANIMATION_DURATION);
        if (result != null) {
            mDestination.setImageBitmap(result);
            isBitmapSet = true;
            mDestination.startAnimation(in);
        } else {
            mFakeForError.startAnimation(in);
        }
        mProgressBar.startAnimation(out);
    }
    public int dpToPx(int dp) {
        DisplayMetrics displayMetrics = mDestination.getContext().getResources().getDisplayMetrics();
        int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
        return px;
    }
}

Add permission

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

And execute :

 new DownloadImageTask(context, imageViewToLoad, urlToImage).execute();

Solution 9 - Android

Here is sample code for display Image from URL.

public static Void downloadfile(String fileurl, ImageView img) {
        Bitmap bmImg = null;
        URL myfileurl = null;
        try {
            myfileurl = new URL(fileurl);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            HttpURLConnection conn = (HttpURLConnection) myfileurl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            int length = conn.getContentLength();
            if (length > 0) {
                int[] bitmapData = new int[length];
                byte[] bitmapData2 = new byte[length];
                InputStream is = conn.getInputStream();
                bmImg = BitmapFactory.decodeStream(is);
                img.setImageBitmap(bmImg);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Solution 10 - Android

add Internet permission in manifest

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

than create methode as below,

 public static Bitmap getBitmapFromURL(String src) {
    try {
        Log.e("src", src);
        URL url = new URL(src);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input);
        Log.e("Bitmap", "returned");
        return myBitmap;
    } catch (IOException e) {
        e.printStackTrace();
        Log.e("Exception", e.getMessage());
        return null;
    }
}

now add this in your onCreate method,

 ImageView img_add = (ImageView) findViewById(R.id.img_add);


img_add.setImageBitmap(getBitmapFromURL("http://www.deepanelango.me/wpcontent/uploads/2017/06/noyyal1.jpg"));

this is works for me.

Solution 11 - Android

Best Method I have tried instead of using any libraries

public Bitmap getbmpfromURL(String surl){
    try {
        URL url = new URL(surl);
        HttpURLConnection urlcon = (HttpURLConnection) url.openConnection();
        urlcon.setDoInput(true);
        urlcon.connect();
        InputStream in = urlcon.getInputStream();
        Bitmap mIcon = BitmapFactory.decodeStream(in);
        return  mIcon;
    } catch (Exception e) {
        Log.e("Error", e.getMessage());
        e.printStackTrace();
        return null;
    }
}

Solution 12 - Android

public class MainActivity extends Activity {

	Bitmap b;
	ImageView img;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		img = (ImageView)findViewById(R.id.imageView1);
		information info = new information();
		info.execute("");
	}

	public class information extends AsyncTask<String, String, String>
	{
		@Override
		protected String doInBackground(String... arg0) {
			
			try
			{
				URL url = new URL("http://10.119.120.10:80/img.jpg");
				InputStream is = new BufferedInputStream(url.openStream());
				b = BitmapFactory.decodeStream(is);
				
			} catch(Exception e){}
			return null;
		}

		@Override
		protected void onPostExecute(String result) {
			img.setImageBitmap(b);
		}
	}
}

Solution 13 - Android

The code below show you how to set ImageView from a url string, using RxAndroid. First, add RxAndroid library 2.0

dependencies {
    // RxAndroid
    compile 'io.reactivex.rxjava2:rxandroid:2.0.0'
    compile 'io.reactivex.rxjava2:rxjava:2.0.0'

    // Utilities
    compile 'org.apache.commons:commons-lang3:3.5'

}

now use setImageFromUrl to set image.

public void setImageFromUrl(final ImageView imageView, final String urlString) {

    Observable.just(urlString)
        .filter(new Predicate<String>() {
            @Override public boolean test(String url) throws Exception {
                return StringUtils.isNotBlank(url);
            }
        })
        .map(new Function<String, Drawable>() {
            @Override public Drawable apply(String s) throws Exception {
                URL url = null;
                try {
                    url = new URL(s);
                    return Drawable.createFromStream((InputStream) url.getContent(), "profile");
                } catch (final IOException ex) {
                    return null;
                }
            }
        })
        .filter(new Predicate<Drawable>() {
            @Override public boolean test(Drawable drawable) throws Exception {
                return drawable != null;
            }
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<Drawable>() {
            @Override public void accept(Drawable drawable) throws Exception {
                imageView.setImageDrawable(drawable);
            }
        });
}

Solution 14 - Android

loadImage("http://relinjose.com/directory/filename.png");

Here you go

void loadImage(String image_location) {
	URL imageURL = null;
	if (image_location != null) {
		try {
			imageURL = new URL(image_location);			
			HttpURLConnection connection = (HttpURLConnection) imageURL
					.openConnection();
			connection.setDoInput(true);
			connection.connect();
			InputStream inputStream = connection.getInputStream();
			bitmap = BitmapFactory.decodeStream(inputStream);// Convert to bitmap
			ivdpfirst.setImageBitmap(bitmap);
		} catch (IOException e) {
			e.printStackTrace();
		}
	} else {
		//set any default
	}
}

Solution 15 - Android

Try this:

InputStream input = contentResolver.openInputStream(httpuri);
Bitmap b = BitmapFactory.decodeStream(input, null, options);

Solution 16 - Android

To me, Fresco is the best among the other libraries.

Just setup Fresco and then simply set the imageURI like this:

draweeView.setImageURI(uri);

Check out this answer explaining some of Fresco benefits.

Solution 17 - Android

This is my working solution using Adrian's code example:

private void loadImage(String pUrl) {
    Thread imageDataThread = new Thread(() -> {
        try {
            URL tUrl = new URL(pUrl);
            Bitmap imageBitmap = BitmapFactory.decodeStream(tUrl.openConnection().getInputStream());
            runOnUiThread(() -> image_preview.setImageBitmap(imageBitmap));
        } catch(IOException pExc) {
            showToast("Error loading image for this question!");
            pExc.printStackTrace();
        }
    });
    imageDataThread.start();
}

Note: You can use this pre-defined method to load image bitmap or you can use yours in case you need to resize image or some similar operation over image.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSanat PandeyView Question on Stackoverflow
Solution 1 - AndroidKyle CleggView Answer on Stackoverflow
Solution 2 - AndroidRajathView Answer on Stackoverflow
Solution 3 - AndroidvijaicvView Answer on Stackoverflow
Solution 4 - AndroidSanjayrajsinhView Answer on Stackoverflow
Solution 5 - AndroidRakesh RanganiView Answer on Stackoverflow
Solution 6 - AndroidJazzView Answer on Stackoverflow
Solution 7 - AndroidkoushView Answer on Stackoverflow
Solution 8 - AndroidSergey ShustikovView Answer on Stackoverflow
Solution 9 - AndroidNiranj PatelView Answer on Stackoverflow
Solution 10 - AndroidJinal AwaiyaView Answer on Stackoverflow
Solution 11 - AndroidSabari KarthikView Answer on Stackoverflow
Solution 12 - AndroidRahul RainaView Answer on Stackoverflow
Solution 13 - AndroidDàChúnView Answer on Stackoverflow
Solution 14 - AndroidExceptionalView Answer on Stackoverflow
Solution 15 - AndroidchungView Answer on Stackoverflow
Solution 16 - AndroidWilder PereiraView Answer on Stackoverflow
Solution 17 - AndroiddkeroView Answer on Stackoverflow