【发布时间】:2014-08-25 08:42:20
【问题描述】:
我不明白为什么位图为空。我已经测试了从doInbackGround() 返回的值,它不为空,onPostExecute() 方法也不为空。 AsyncTask 在使用 bitMap 之前被执行,但是这个值还是 null。
我的异步任务:
public class ImageTask extends AsyncTask<Void, Void, Bitmap> {
private Display display;
public ImageTask(Display display) {
this.display = display;
}
@Override
protected Bitmap doInBackground(Void... params) {
Bitmap overlay;
try {
URL url = new URL(...);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
overlay = BitmapFactory.decodeStream(input);
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return overlay;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap != null)
display.setBitmap(bitmap);
}
}
我在 Display 类中在这里启动 AsyncTask:
public class Display{
private Bitmap bitmap;
...
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
}
public void func(){
....
new ImageTask(this).execute();
canvas.drawBitmap(bitmap, 25, 25, null); -> bitmap is null here !?!?!
....
}
我的日志:
08-25 10:19:00.757: E/AndroidRuntime(4322): FATAL EXCEPTION: main
08-25 10:19:00.757: E/AndroidRuntime(4322): java.lang.NullPointerException
08-25 10:19:00.757: E/AndroidRuntime(4322): at android.graphics.Canvas.throwIfRecycled(Canvas.java:1025)
08-25 10:19:00.757: E/AndroidRuntime(4322): at android.graphics.Canvas.drawBitmap(Canvas.java:1065)
08-25 10:19:00.757: E/AndroidRuntime(4322): at com.graphic.core.Display.addMarker(Display.java:51)
现在我有一个问题,当我执行asyncTask.execute() 时,这条指令下面的行会被执行吗?或者这些行仅在 asyncTask 完成后执行? 我认为这些行是在onPostExecute() 之后执行的,但我想澄清一下。
提前致谢。
【问题讨论】:
标签: java android bitmap android-asynctask