我从具有较大像素大小的url下载图像。获取此位图是在AsyncTask中完成的。代码如下:在Android中获取大位图的宽度会导致NullPointerException
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);
它给我的NullPointerException上mBitmap.getWidth()。我用其他屏幕分辨率较低的图片进行了检查,结果表明虽然有效我试图压缩位图,但失败了。 有什么建议?提前致谢。
更新:logcat的如下:
引起:显示java.lang.NullPointerException:尝试调用虚拟方法 '诠释android.graphics.Bitmap.getWidth()' 上的空对象引用
第二个片段用在另一个叫asynctask的位图调用后的asynctask中。
是getWidth还是mBitmap为空? – ApriOri
@ApriOri更新了问题。 – huk
请告诉我们完整的代码。 –