我如何知道下载图像是否失败?
我首先下载图片网址,然后从那里获取图片文件名存储到我的数据库。然后有两个方法从url下载,save保存为文件名。顺便说一下,它们是由AsyncTask调用的方法调用的。
以下是处理图像文件下载的两种方法(由我的大四生下):
private void imageProcessing(String url, String filename) {
String root = Environment.getExternalStorageDirectory().toString();
// String root1= getResources().getIdentifier(name, defType, defPackage)
File myDir = new File(root + "/arson/images");
File nomedia = new File(myDir, ".nomedia");
if (!nomedia.exists()) {
Log.wtf("nomedia not exists", nomedia.getAbsolutePath().toString());
try {
nomedia.createNewFile();
} catch (IOException e1) {
Log.e("NEW FILE CREATION", e1.toString());
e1.printStackTrace();
}
} else {
Log.wtf("nomedia exists", nomedia.getAbsolutePath().toString());
}
File file = new File(myDir, filename);
if (file.exists()) {
file.delete();
}
try {
Bitmap bitmap = downloadBitmap(url);
myDir.mkdirs();
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
Log.e("BITMAP PROCESS", e.toString());
}
}
public static Bitmap downloadBitmap(String url) {
final AndroidHttpClient client = AndroidHttpClient.newInstance("Android");
final HttpGet getRequest = new HttpGet(url);
try {
HttpResponse response = client.execute(getRequest);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
return null;
}
final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
System.setProperty("http.keepAlive", "false");
inputStream = entity.getContent();
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (Exception e) {
// Could provide a more explicit error message for IOException or
// IllegalStateException
getRequest.abort();
} finally {
if (client != null)
client.close();
}
return null;
}
提前致谢!
答案 0 :(得分:0)
这里有两种可能的问题。
1)HTTP状态代码不是200:如果发生这种情况,您将返回null,当您获得null时,您可以知道下载时出现问题。
2)HTTP状态代码为200,但文件下载失败:您将在这里遇到异常,或者根本没有异常。如果您有例外,那么您已经抓住了它。对于没有例外的其他情况,您必须稍微更改您的实现。您必须先保存下载的文件(临时文件),读取contentLength并验证它是否与您从服务器获得的内容相匹配。如果contentLength正确,则可以使用BitmapFactory从设备读取文件。