我想在屏幕上显示图像。图像应该来自URL,而不是可绘制的。
代码在这里:
<ImageView android:id="@+id/ImageView01" android:src = "http://l.yimg.com/a/i/us/we/52/21.gif"
android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView>
但它在编译时出错。
如何在Android中显示来自网址的图片?
答案 0 :(得分:96)
您可以直接在网上显示图片而无需下载。请检查以下功能。它会将网络上的图像显示在图像视图中。
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;
}
}
然后使用您活动中的代码将图片设置为imageview。
答案 1 :(得分:16)
我尝试使用此代码为我工作,直接从网址获取图片
splash screen
在onCreate()方法中使用
new DownloadImageTask((ImageView)findViewById(R.id.image)) .execute(&#34; http://scoopak.com/wp-content/uploads/2013/06/free-hd-natural-wallpapers-download-for-pc.jpg&#34);
答案 2 :(得分:15)
你可以试试我在另一个问题中找到的。
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();
}
答案 3 :(得分:8)
你可以试试Picasso,这真的很好,也很容易。 不要忘记在清单中添加权限。
Picasso.with(context)
.load("http://ImageURL")
.resize(width,height)
.into(imageView );
答案 4 :(得分:5)
简单的例子,
http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device
您必须使用httpClient并下载图像(如果需要,将其缓存),
提供用于在listview中显示图像的解决方案,基本上是相同的代码(检查从url设置imageview的代码)以进行显示。答案 5 :(得分: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;
}
答案 6 :(得分:3)
InputStream URLcontent = (InputStream) new URL(url).getContent();
Drawable image = Drawable.createFromStream(URLcontent, "your source link");
这对我有用
答案 7 :(得分:1)
使用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);
答案 8 :(得分:1)
我也有同样的问题。我测试这段代码并且效果很好。此代码从URL获取图像并放入 - &#34; bmpImage&#34;
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);
答案 9 :(得分:0)
您可以简单地使用Glide API。它避免了所有样板代码,并且可以用两行代码来完成任务。您引用此链接https://blog.mindorks.com/downloading-and-showing-image-with-glide-library-in-android。享受