Manu
Manu

Reputation: 4750

Check Image Half Loaded or Not in Android

I am getting Image as BLOB type from API. And, I am saving as follows,

public static void setOptimalImage(Context ctx, File file, ImageView iv,
            Point size) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(file.getPath(), options);
        if (options.outHeight > 0 && options.outWidth > 0) {
            if (size == null) {
                size = new Point();
                WindowManager wm = (WindowManager) ctx
                        .getSystemService(Context.WINDOW_SERVICE);
                wm.getDefaultDisplay().getSize(size);
            }
            options.inSampleSize = Utils.calculateInSampleSize(options, size.x,
                    size.y);
            options.inJustDecodeBounds = false;
            try {
                iv.setImageBitmap(BitmapFactory.decodeFile(file.getPath(),
                        options));
            } catch (OutOfMemoryError oome) {
                Log.e(Utils.class.getName(),
                        oome.getMessage() == null ? "OutOfMemory error: "
                                + file.getName() : oome.getMessage());
            }
        }
    }

Now, the issue i am facing is,

When I am saving it, sometimes the image is saving only half.Now, my question is,

Edit:

Any help would be really appreciated.

Thanks.

Attaching Image for Reference:

enter image description here

Upvotes: 8

Views: 805

Answers (2)

emidander
emidander

Reputation: 2403

Ideally you should make the API return a checksum (e.g. MD5) with each file. You can then generate a checksum using the same algorithm in Android for the downloaded file and compare it with the one returned from the API. Look into the java.security.MessageDigest class for details on how to generate a checksum.

Upvotes: 0

Oleksandr
Oleksandr

Reputation: 6356

I think you look into incorrect direction of detecting corrupted images. It would be easy to manage loaded (or semi-loaded) bitmaps using API and requests. You can also have a file (or even better a database), in which you will have an information about downloaded images.

I see multiple checks, "is image downloaded?":

  • API should tell you what is expected size of image you want to download. After loading is finished you have to check sizes and compare are they equals
  • You can detect with what error code your request is finished. If it is finished with success code you can mark you image is loaded

And after during display you can detect which images are fully loaded.

Upvotes: 1

Related Questions