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