如何在 Android 上显示来自 URL 的图像
Posted
技术标签:
【中文标题】如何在 Android 上显示来自 URL 的图像【英文标题】:How to display image from URL on Android 【发布时间】:2011-09-18 10:29:20 【问题描述】:我想在屏幕上显示图像。图片应该来自 URL,而不是可绘制的。
代码在这里:
<ImageView android:id="@+id/ImageView01" android:src = "http://l.yimg.com/a/i/us/we/52/21.gif"
android:layout_ android:layout_></ImageView>
但它在编译时会出错。
如何在 Android 中显示来自 URL 的图像?
【问题讨论】:
【参考方案1】:举个简单的例子,http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device
您必须使用 httpClient 并下载图像(如果需要,将其缓存),
为在列表视图中显示图像提供的解决方案,基本相同的代码(检查从 url 设置 imageview 的代码)用于显示。
Lazy load of images in ListView
【讨论】:
【参考方案2】:您可以直接从网络显示图像而无需下载。请检查以下功能。它会将来自网络的图像显示到您的图像视图中。
public static Drawable LoadImageFromWebOperations(String url)
try
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
catch (Exception e)
return null;
然后使用 Activity 中的代码将图像设置为 imageview。
【讨论】:
@ChiragPatel:这个链接可能会回答你:***.com/a/6127377/944657 需要互联网权限 这种情况下的“src name”是什么? @Eatlon 和其他任何人都想知道,“src name”在不使用 9patch 时是一个无用的变量。看看***.com/questions/6122599/… 小心那个讨厌的android.os.NetworkOnMainThreadException
【参考方案3】:
InputStream URLcontent = (InputStream) new URL(url).getContent();
Drawable image = Drawable.createFromStream(URLcontent, "your source link");
这对我有用
【讨论】:
“你的源链接”基本上是什么?我有一个谷歌的图片网址,我希望该图片加载到上面代码使用的图片视图中,但它返回 null ?如何解决这个问题? ***.com/questions/6122599/… - 这将回答问题url
和 "your source link"
一样吗?【参考方案4】:
我重试了来自 URL 的图像并使用以下代码存储在我的 SD 卡上:
public String Downloadfromurl(String Url)
String filepath=null;
try
URL url = new URL(Url);
//create the new connection
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//set up some things on the connection
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
//and connect!
urlConnection.connect();
//set the path where we want to save the file
//in this case, going to save it on the root directory of the
//sd card.
folder = new File(Environment.getExternalStorageDirectory().toString()+"/img");
folder.mkdirs();
//create a new file, specifying the path, and the filename
//which we want to save the file as.
String filename= "page"+no+".PNG";
file = new File(folder,filename);
if(file.createNewFile())
file.createNewFile();
//this will be used to write the downloaded data into the file we created
FileOutputStream fileOutput = new FileOutputStream(file);
//this will be used in reading the data from the internet
InputStream inputStream = urlConnection.getInputStream();
//this is the total size of the file
int totalSize = urlConnection.getContentLength();
//variable to store total downloaded bytes
int downloadedSize = 0;
//create a buffer...
byte[] buffer = new byte[1024];
int bufferLength = 0; //used to store a temporary size of the buffer
//now, read through the input buffer and write the contents to the file
while ( (bufferLength = inputStream.read(buffer)) > 0 )
//add the data in the buffer to the file in the file output stream (the file on the sd card
fileOutput.write(buffer, 0, bufferLength);
//add up the size so we know how much is downloaded
downloadedSize += bufferLength;
//this is where you would do something to report the prgress, like this maybe
Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
//close the output stream when done
fileOutput.close();
if(downloadedSize==totalSize)
filepath=file.getPath();
//catch some possible errors...
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
filepath=null;
e.printStackTrace();
Log.i("filepath:"," "+filepath) ;
return filepath;
【讨论】:
**如果要显示来自 sdcard 的图像,请使用此 ** Bitmap bmp = BitmapFactory.decodeFile(folder + "/page"+no+".PNG"); imgview.setImageBitmap(bmp);【参考方案5】:你可以试试我在另一个问题中找到的这个。
Android, Make an image at a URL equal to ImageView's image
try
ImageView i = (ImageView)findViewById(R.id.image);
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent());
i.setImageBitmap(bitmap);
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
【讨论】:
是否导入必要的文件?例如 java.io.IOException 等等。 如果您的设备运行在 3.x 或 4.x 上,您需要使用 handler 或 asynctask 在 UI Thread 之外进行下载操作。因为 UI Thread 中禁止下载操作。此博客可能有用androiddesignpatterns.com/2012/06/….【参考方案6】:使用ASyncTask
编写代码进行http处理。
Bitmap b;
ImageView img;
......
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)
......
img.setImageBitmap(b);
【讨论】:
【参考方案7】:我也有同样的问题。我测试了这段代码并且运行良好。此代码从 URL 获取图像并放入 - "bmpImage"
URL url = new URL("http://your URL");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(60000 /* milliseconds */);
conn.setConnectTimeout(65000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
int response = conn.getResponseCode();
//Log.d(TAG, "The response is: " + response);
is = conn.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(is);
Bitmap bmpImage = BitmapFactory.decodeStream(bufferedInputStream);
【讨论】:
【参考方案8】:我试过这段代码为我工作,直接从 url 获取图像
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.image)) .execute("http://scoopak.com/wp-content/uploads/2013/06/free-hd-natural-wallpapers-download-for-pc.jpg");
【讨论】:
有效,但我必须添加:你可以试试 Picasso,它真的很不错,也很简单。 不要忘记在清单中添加权限。
Picasso.with(context)
.load("http://ImageURL")
.resize(width,height)
.into(imageView );
您也可以在此处查看教程: Youtube / Github
【讨论】:
【参考方案10】:您可以简单地使用 Glide API。它避免了所有样板代码,并且可以在两行代码中完成任务。您参考此链接https://blog.mindorks.com/downloading-and-showing-image-with-glide-library-in-android。享受
【讨论】:
虽然链接可能有用,但最好直接在 SO 上发布解决方案。 步骤 1 ) 转到 build.gradle 并复制粘贴这两个依赖项 1) implementation 'com.github.bumptech.glide:glide:4.9.0' annotationProcessor 'com.github.bumptech.glide: compiler:4.9.0' 然后在你的相对布局中创建一个 ImageView。 3) 将此代码放入您的 Java 文件中以上是关于如何在 Android 上显示来自 URL 的图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在网站中显示来自 Firestore 下载 URL 的图像
如何在 Android 上的 ImageView 上显示来自网站的图像?
在 Android(java) 中,如何使用 URL 而不是来自互联网的图像地址在 ImageView 中加载图像?