23 ответов:
// 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.Пикассо позволяет без проблем загружать изображения в ваше приложение-часто в одной строке кода!
Используете Gradle:
implementation 'com.squareup.picasso:picasso:2.71828'только одна строка кода!
Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);2.скольжения библиотека загрузки и кэширования изображений для Android, ориентированная на плавную прокрутку
использовать Gradle в:
repositories { mavenCentral() google() } dependencies { implementation 'com.github.bumptech.glide:glide:4.7.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1' }// для простой вид:
Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(imageView);3.фреска - это мощная система для отображения изображений в Android приложения.Fresco заботится о загрузке и отображении изображений, поэтому у вас нет к.
Я написал класс, чтобы справиться с этим, так как это, кажется, повторяющаяся потребность в моих различных проектах:
https://github.com/koush/UrlImageViewHelper
UrlImageViewHelper заполнит ImageView с изображением, которое находится по URL-адресу.
образец будет делать Изображение Google Поиск и загрузка / отображение результатов асинхронно.
UrlImageViewHelper будет автоматически загрузите, сохраните и кэшируйте все URL-адреса изображений BitmapDrawables. Дублированные ссылки не будут загружены в память дважды. Растровая память управляется с помощью слабой ссылочной хэш-таблицы, так что как только изображения больше нет используется вами, это будет мусор собираются автоматически.
в любом случае люди просят мой комментарий опубликовать его в качестве ответа. я отправляю.
URL newurl = new URL(photo_url_str); mIcon_val = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); profile_photo.setImageBitmap(mIcon_val);спасибо.
принятый ответ выше отлично подходит, если вы загружаете изображение на основе нажатия кнопки, однако если вы делаете это в новой деятельности, он замораживает пользовательский интерфейс на секунду или две. Оглядываясь вокруг, я обнаружил, что простая задача asynctask устранила эту проблему.
чтобы использовать 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);результатом является быстро загруженная активность и imageview это появляется на долю секунды позже в зависимости от скорости сети пользователя.
вы также можете использовать это представление LoadingImageView для загрузки изображения из 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; } }
Привет у меня самый простой код попробуйте это
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; } } }главная.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"/>попробуй такое
Я недавно нашел нить здесь, так как я должен сделать аналогичную вещь для listview с изображениями, но принцип прост, как вы можете прочитать в первом примере класса, показанного там (по 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");
много хорошей информации здесь...Недавно я нашел класс под названием SmartImageView, который, кажется, работает очень хорошо до сих пор. Очень легко включить и использовать.
http://loopj.com/android-smart-image-view/
https://github.com/loopj/android-smart-image-view
обновление: я закончил писать пост в блоге об этом, так что проверьте его на помощь по использованию SmartImageView.
2-Е ОБНОВЛЕНИЕ: я теперь всегда использую Пикассо для этого (см. выше) и очень рекомендую его. :)
лучшей современной библиотекой для такой задачи на мой взгляд является Пикассо на площади. Это позволяет загружать изображение в ImageView по URL с одним лайнером:
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
это поздний ответ, как указано выше
AsyncTaskбудет и после погуглив немного, я нашел еще один путь для этой проблемы.
Drawable drawable = Drawable.createFromStream((InputStream) new URL("url").getContent(), "src");
imageView.setImageDrawable(drawable);вот полная функция:
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(); }не забудьте добавить следующие разрешения в
AndroidManifest.xmlдля доступа в интернет.
<uses-permission android:name="android.permission.INTERNET" />я попробовал это сам, и я еще не сталкивался с какой-либо проблемой.
imageView.setImageBitmap(BitmapFactory.decodeStream(imageUrl.openStream()));//try/catch IOException and MalformedURLException outside
Это поможет вам...
определить 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());
Работа для imageView в любом контейнере, как вид сетки listview, нормальный макет
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 );
версия с обработкой исключений и асинхронных задач:
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/сервера в виде asyncTask С также кэшированным изображением в файл устройства или область кэша.
- скачать библиотеку "AndroidQuery"отсюда
- скопируйте / вставьте эту банку в папку Project lib и добавьте эту библиотеку в project build-path
- теперь я показываю демо как использовать его.
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 может справиться с этим для вас и многое другое (например, кэш и прогресс загрузки).
посмотри здесь.
Я думаю, что это лучший подход.
Comments