Reputation: 4750
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:
Upvotes: 8
Views: 805
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
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?":
And after during display you can detect which images are fully loaded.
Upvotes: 1