Загрузить изображение с URL-адреса

У меня есть URL-адрес изображения. Я хочу отобразить изображение с этого URL-адреса в ImageView, но я не могу этого сделать.

Как это можно достичь?

Solutions Collecting From Web of "Загрузить изображение с URL-адреса"

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

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

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

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

Не забудьте добавить ниже разрешения в файл манифеста

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

Отлично работает для меня. 🙂

Попробуйте picassso приятно и заканчивается в одном заявлении

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

Учебник: https://youtu.be/DxRqxsEPc2s

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

В вашей деятельности возьмите изображение и установите ресурс imageDownload (url, yourImageview);

Попробуйте добавить файл picasso lib jar

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

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

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

https://github.com/koush/UrlImageViewHelper

Попробуй это

 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); } else { } } catch(IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

UrlImageViewHelper лучше всего подходит для загрузки изображения из URL.

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

Эффект загрузки и эффект появления:

 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 (pandarium.shustikov@gmail.com) 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; } } 

Добавить разрешение

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

И выполните:

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

Лучший метод, который я попытался вместо использования каких-либо библиотек

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

Вы можете использовать загрузчик изображений Picasso и Glide и отображаться в режиме просмотра изображений

Посмотрите эти вопросы и сосредоточьтесь на первых ответах, здесь вы можете найти два простых и полных способа сделать это:

Первый метод (более полный)

или

Второй метод (проще)

В приведенном ниже коде показано, как установить ImageView из строки url, используя RxAndroid. Сначала добавьте библиотеку RxAndroid 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' } 

Теперь используйте setImageFromUrl для установки изображения.

 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); } }); } 
 loadImage("http://relinjose.com/directory/filename.png"); 

Ну вот

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

Попробуй это:

 InputStream input = contentResolver.openInputStream(httpuri); Bitmap b = BitmapFactory.decodeStream(input, null, options); 
 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); } } } 

Для меня Fresco – лучшая среди других библиотек.

Просто настройте Fresco, а затем просто установите imageURI следующим образом:

 draweeView.setImageURI(uri); 

Проверьте этот ответ, объяснив некоторые преимущества Fresco.