私が夢中になっているのは、私のプログラムが try ブロックの途中で停止し、すべての catch ブロックの後に続くことです! 詳細はこちら。AsyncTask を取得しました
public class BigBitmapLoader extends AsyncTask<Uri, Void, Bitmap>
{
public BigBitmapLoader(ScribblesView scribbles)
{
scribblesRef = new WeakReference<ScribblesView>(scribbles);
}
@Override
protected Bitmap doInBackground(Uri... params)
{
InputStream is;
try
{
ScribblesView scribs = scribblesRef.get();
if (scribs != null)
{
is = scribs.getContext().getContentResolver().openInputStream(params[0]);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
return bitmap;
}
}
catch(FileNotFoundException e)
{
Log.e(ERROR_TAG, e.toString());
}
catch(IOException e)
{
Log.e(ERROR_TAG, e.toString());
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap)
{
ScribblesView scribs = scribblesRef.get();
if (scribs != null) scribs.setBigBitmap(bitmap);
}
private WeakReference<ScribblesView> scribblesRef;
private static final String ERROR_TAG = "BigBitmapLoader";
}
doInBackground() では、すべての catch ブロックに到達is.close()
し、すぐにジャンプします。return null
したがって、スキップしますreturn bitmap
。この時点で例外はありませんでした。後で返されたビットマップが使用されたときにのみ、NPE を取得しました。何か案は?