可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to display image on screen. Image should come from URL, and not drawable.
Code is here:
<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>
but it gives error at compile time.
How do I display image from URL in Android?
回答1:
You can directly show image from web without downloading it. Please check the below function . It will show the images from the web into your image view.
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;
}
}
then set image to imageview using code in your activity.
回答2:
You can try this which I find in another question.
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:
I tried this code working for me,get image directly from 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);
}
}
use inside onCreate() method
new DownloadImageTask((ImageView) findViewById(R.id.image))
.execute(\"http://scoopak.com/wp-content/uploads/2013/06/free-hd-natural-wallpapers-download-for-pc.jpg\");
回答4:
You can try with Picasso, it\'s really nice and easy.
Don\'t forget to add the permissions in the manifest.
Picasso.with(context)
.load(\"http://ImageURL\")
.resize(width,height)
.into(imageView );
You can also take a look at a tutorial here :
Youtube /
Github
回答5:
For simple example,
http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device
You will have to use httpClient and download the image (cache it if required) ,
solution offered for displaying images in listview, essentially same code(check the code where imageview is set from url) for displaying.
Lazy load of images in ListView
回答6:
I retried an image from a URL and stored on my SD-card using the following code:
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;
}
回答7:
InputStream URLcontent = (InputStream) new URL(url).getContent();
Drawable image = Drawable.createFromStream(URLcontent, \"your source link\");
this has worked for me
回答8:
Write the code using ASyncTask
for http handling.
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);
回答9:
I\'ve same issue. I test this code and works well. This code Get Image from URL and put in - \"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);