下载图像失败

时间:2014-07-07 06:12:57

标签: android android-asynctask

我如何知道下载图像是否失败?

我首先下载图片网址,然后从那里获取图片文件名存储到我的数据库。然后有两个方法从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;
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

这里有两种可能的问题。

1)HTTP状态代码不是200:如果发生这种情况,您将返回null,当您获得null时,您可以知道下载时出现问题。

2)HTTP状态代码为200,但文件下载失败:您将在这里遇到异常,或者根本没有异常。如果您有例外,那么您已经抓住了它。对于没有例外的其他情况,您必须稍微更改您的实现。您必须先保存下载的文件(临时文件),读取contentLength并验证它是否与您从服务器获得的内容相匹配。如果contentLength正确,则可以使用BitmapFactory从设备读取文件。