处理从URL加载图像

时间:2011-10-31 12:14:45

标签: android image drawable

我有这段代码从网址中提取图片并在应用中显示。

    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文件夹中)。

有人可以帮助修改上面的方法,以便它在后台运行并在加载时显示相应的图像,如果有问题吗?

谢谢!你们摇滚顺便。

香农

3 个答案:

答案 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);

希望这会对某人有所帮助:)。