0

我正在尝试让应用程序显示来自 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;

变量 result 和 img 都返回为 null

4

1 回答 1

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;

并且return resultdoInBackground(). null你让它们切换,所以无论发生什么,“img”都会出现。

此外,您不能使用ToastindoInBackground()因为此方法不在UI线程上运行。您需要将其设置为 aLogToast放入onPostExecute()or onProgressUpdate()。这些是我看到的。如果您仍然遇到问题,那么您需要更清楚具体是什么。您将需要调试并使用断点来查看应该返回的内容并进一步查明问题所在

AsyncTask - 任何UI更新都必须在其他方法之一中完成,AsyncTask或者doInBackground()您可以将值传递回 以Activity更新UI那里。

于 2013-04-09T13:05:14.690 回答