我有以下的异步任务,它应该只是从给定的URL加载一张图片。这些图片确实存在,而且我也可以访问它们。
private class FetchVehicleImage extends AsyncTask<String, Integer, Bitmap>
{
private ProgressBar mSpinner;
private ImageView mImage;
private String imagesBaseUrl = "http://mywebsite.net/images/";
private URL url = null;
@Override
protected void onPreExecute()
{
mImage = (ImageView) findViewById(R.id.vehicle_image);
mSpinner = (ProgressBar) findViewById(R.id.vehicle_image_progress_bar);
mSpinner.setIndeterminate(true);
mSpinner.setVisibility(View.VISIBLE);
mImage.setVisibility(View.GONE);
}
@Override
protected Bitmap doInBackground(String... strings)
{
Bitmap bm = null;
try
{
url = new URL(imagesBaseUrl + strings[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bm = BitmapFactory.decodeStream(is);
}
catch (Exception e)
{
e.printStackTrace();
}
return bm;
}
protected void onPostExecute(final Bitmap result)
{
if (result != null)
{
mImage.setImageBitmap(result);
}
mImage.setVisibility(View.VISIBLE);
mSpinner.setVisibility(View.GONE);
}
}
我从未看到
doInBackground
中的异常,但有时bm
返回为null,但这非常间歇性。我有4张图片,其中3张每次都可以完美加载,但有一张只有在我在bm
赋值处打断点时才会加载,这样似乎给了它足够的时间来完成工作?我认为
doInBackground
应该在后台线程上运行,因此我应该始终要么获取图像,要么得到异常?