我有这段代码从网址中提取图片并在应用中显示。
Drawable drawableTest = LoadImageFromWeb("http://www.someimageurl");
imgView.setImageDrawable(drawableTest);
private Drawable LoadImageFromWeb(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;
}
}
该方法有效,图像可以毫无问题地拉入应用程序。我想做的是两件事......
1)将流程移至后台主题。
2)在下载图像时显示“加载”可绘制(位于可绘制文件夹中),然后在完成后切换到图像。如果有问题,我想加载“无法加载图片”drawable(也位于drawable文件夹中)。
有人可以帮助修改上面的方法,以便它在后台运行并在加载时显示相应的图像,如果有问题吗?
谢谢!你们摇滚顺便。
香农
答案 0 :(得分:5)
您可以使用AsyncTask
在另一个线程中运行任务。这样,它就不会阻止UI。粗略地说,它应该是这样的:
private class MyTask extends AsyncTask<String, Void, Drawable> {
ProgressDialog pd;
protected Drawable doInBackground(String... url) {
try {
pd = ProgressDialog.show(this, "Working..", "Getting image", true, false);
InputStream is = (InputStream) new URL(url[0]).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
} catch (Exception e) {
System.out.println("Exception = " + e);
return null;
}
}
protected void onProgressUpdate(Void... progress) {
}
protected void onPostExecute(Drawable result) {
/* Image loaded...*/
pd.dismiss();
imgView.setImageDrawable(result);
}
}
MyTask task = new MyTask();
task.execute("http://www.someimageurl");
您可以随意更改ProgressDialog
...
答案 1 :(得分:0)
试试这段代码......
Drawable d;
LoadImageFromWebThread loadImageFromWebThread=new LoadImageFromWebThread(url);
loadImageFromWebThread.start();
imgView.setImageDrawable(R.drawable.downloaded);
class LoadImageFromWebThread extends Thread
{
String url;
public LoadImageFromWebThread(String url)
{
this.url=url;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
InputStream is = (InputStream) new URL(url).getContent();
d = Drawable.createFromStream(is, "src name");
handler.sendEmptyMessage(0);
}catch (Exception e) {
System.out.println("Exc="+e);
handler.sendEmptyMessage(1);
}
}
}
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(msg.what==0)
{
imgView.setImageDrawable(d);
}
else
{
//Error in downloading image
}
}
};
答案 2 :(得分:0)
我知道我迟到了这个讨论,但我想分享我发现从给定网址异步加载图像的最佳方式。 我正在使用一个名为Android Query的安卓库。 要使用Android查询轻松加载图像,请执行以下操作:
// Init Android Query
AQuery aq = new AQuery(this);
//fetch and set the image from internet, cache with file and memory
aq.id(R.id.image1).image(url);
希望这会对某人有所帮助:)。