我正在从具有较大像素大小的网址下载图片。在AsyncTask中完成此位图的获取。代码如下:
new AsyncTask<String, Void, Bitmap>() {
public Bitmap image;
@Override
protected Bitmap doInBackground(String... params) {
try {
URLConnection conn = new URL(params[0]).openConnection();
conn.setConnectTimeout(CONNECT_TIMEOUT);
conn.setReadTimeout(READ_TIMEOUT);
image = BitmapFactory.decodeStream((InputStream) conn.getContent());
if (image == null)
throw new RuntimeException("Could not read image");
} catch (Exception e) {
e.printStackTrace();
}
return image;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
mBitmap = bitmap;
}
}.execute(imageUrl);
现在,当我试图获得位图的宽度时如下:
Bitmap bitmap = Bitmap.createBitmap(
mBitmap.getWidth(), mBitmap.getHeight(),
Bitmap.Config.ARGB_8888);
它在mBitmap.getWidth()上给出了NullPointerException。我检查了其他具有较低屏幕分辨率的图像,虽然有效。我也尝试压缩位图,但失败了。 有什么建议??提前谢谢。
更新:Logcat如下:
引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'int android.graphics.Bitmap.getWidth()'
第二个片段用于另一个asynctask,在调用asynctask的位图后调用。
答案 0 :(得分:0)
AsyncTask
的要点是onPostExecute
它会设置mBitmap
的值:
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
mBitmap = bitmap; // sets this value asynchronously
}
您只需在设置之前获取其值,这就是null
的原因。
第二个片段用于另一个asynctask,在调用asynctask的位图之后调用。
如果你execute
另一个AsyncTask
,那并不代表你以前的那个已经完成了执行。