如何在 Android 上显示来自 URL 的图像

我想在屏幕上显示图像。图像应该来自 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 中显示 URL 中的图像?

252231 次浏览

举个简单的例子,
Http://www.helloandroid.com/tutorials/how-download-fileimage-url-your-device

您必须使用 httpClient 并下载映像(如果需要,则缓存它) ,

为在 listview 中显示图像提供的解决方案,本质上是相同的代码(检查从 URL 设置 image view 的代码)用于显示。

ListView 中图像的延迟加载

你可以直接从网上显示图片而无需下载。请检查以下功能。它将显示图像从网络到您的图像视图。

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

然后使用活动中的代码将图像设置为图像视图。

InputStream URLcontent = (InputStream) new URL(url).getContent();
Drawable image = Drawable.createFromStream(URLcontent, "your source link");

这招对我很管用

我从一个网址重试了一张图片,并使用以下代码存储在我的 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;


}

你可以试试这个,我在另一个问题中找到了。

Android,使图像的 URL 等于 ImageView 的图像

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

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

我也有同样的问题。我测试了这段代码并且运行良好。此代码从 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);

我试过这个代码为我工作,得到图像直接从网址

      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 ()方法

新的 DownloadImageTask ((ImageView) findViewById (R.id.image)) 。执行(“ http://scoopak.com/wp-content/uploads/2013/06/free-hd-natural-wallpapers-download-for-pc.jpg”) ;

你可以试试毕加索,真的很简单。 不要忘记在清单中添加权限。

Picasso.with(context)
.load("http://ImageURL")
.resize(width,height)
.into(imageView );

你也可以看看这里的教程: Youtube Github

您可以简单地使用 Glide API。它避免了所有的样板代码和任务可以实现在两行代码。请参考此链接 https://blog.mindorks.com/downloading-and-showing-image-with-glide-library-in-android。好好享受吧