Android - 从URL抓取图像并使用AsyncTask在ImageView中显示它

时间:2013-04-09 12:55:23

标签: android image url android-asynctask

我正在尝试让应用程序显示来自URL的图像,我相当确定问题出在AsyncTask上,但过去一周我已经多次回到此代码,我仍然无法看到我在哪里我错了。

设置了Internet权限,我没有收到LogCat

ImageView eventImage2;
eventImage2 = (ImageView) findViewById(R.id.eventImage2);

new imageupdate().execute();

public class imageupdate extends AsyncTask<Bitmap, Void, Bitmap> {

    @Override
    protected Bitmap doInBackground(Bitmap... url) {


        URL url1;

        try {


            url1 = new URL("http://masterzangetsu.eu/Apps/NowIGetYou/banner.png");
            HttpURLConnection connection  = (HttpURLConnection) url1.openConnection();

            InputStream is = connection.getInputStream();
            Bitmap img = BitmapFactory.decodeStream(is);


        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        return img;

    }

    protected void onPreExecute(String result) {


    }

    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);

        eventImage2.setImageBitmap(result);

    }

}

据我所知,用

定义的img变量
img = BitmapFactory.decodeStream(is);

未链接到要返回的变量

return img;

两个变量结果,img返回null

1 个答案:

答案 0 :(得分:1)

更改此

  Bitmap result = null;

        InputStream is = connection.getInputStream();
        Bitmap img = BitmapFactory.decodeStream(is); 


        img = result;

  Bitmap img = null;

        InputStream is = connection.getInputStream();
        Bitmap img = BitmapFactory.decodeStream(is); 


        result = img;
{p}和return result中的doInBackground()。你让他们换了个,所以'img'无论发生什么都会null

此外,您无法在Toast中使用doInBackground(),因为此方法未在UI主题上运行。您需要将Log设为Toast或将onPostExecute()放入onProgressUpdate()UI。这些是我看到的东西。如果您仍然遇到问题,那么您需要更明确一些具体问题。您将需要调试并使用断点来查看应该返回的内容,并查明问题的原因

AsyncTask - 任何AsyncTask更新必须使用除doInBackground()以外的Activity的其他方法之一进行,或者您可以将值传递回{{1}在那里更新UI