Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if ImageView contains Bitmap or not?

I am implementing if a ImageView has bitmap then it should save the image from imageview to internal memory ,otherwise set another bitmap in internal memory of application. here is code:_

 croppedImage = cropImageView.getCroppedImage();
                 croppedImageView = (ImageView) findViewById(R.id.croppedImageView);
                croppedImageView.setImageBitmap(croppedImage);@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn_save:
            counter++;
            if(croppedImageView.getDrawable() != null)
            {
                System.out.println("nullllllllllllll");

                try {
                    Bitmap photo = ((BitmapDrawable)croppedImageView.getDrawable()).getBitmap();
                    FileOutputStream mFileOutStream1 = openFileOutput("IMG" + counter + ".png", Context.MODE_PRIVATE);
                    photo.compress(CompressFormat.JPEG, 100, mFileOutStream1);} 
                catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();}
                }else{
                  System.out.println("notttttnullllllllllllll");
                  try {
                     FileOutputStream mFileOutStream1 = openFileOutput("IMG" + counter + ".png", Context.MODE_PRIVATE);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, mFileOutStream1);
                  } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                  }

                }
Editor editor = def.edit();
            editor.putInt("value", counter);
            editor.commit();
    break;

        default:
            break;
    }
    }
like image 443
amita Avatar asked Dec 09 '22 11:12

amita


2 Answers

You can check it as follows:

boolean hasDrawable = (croppedImageView.getDrawable() != null);
if(hasDrawable) {
    // imageView has image in it
}
else {
    // no image assigned to image view
}

Just check only Bitmap value as below :

if(bitmap == null) {
    // set the toast for select image
} else {
    uploadImageToServer();
}
like image 190
Amulya Khare Avatar answered Dec 11 '22 10:12

Amulya Khare


The accepted answer is not correct for at least one case: when you previously set ImageViews Bitmap to null via:

imageView.setImageBitmap(null);

actually it would NOT set the internal Drawable to null. So, the proposed in the accepted answer check will give you incorrect result.

You can easily find out what's going on in the ImageView source code:

 public void setImageBitmap(Bitmap bm) {
     // if this is used frequently, may handle bitmaps explicitly
     // to reduce the intermediate drawable object
     setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
 }

Meaning that instead of setting its internal Drawable to null, it sets it to a newly created BitmapDrawable with null Bitmap.

Therefore, the correct method of checking whether an ImageView has somewhat meaningful Drawable is something like:

publie static boolean hasNullOrEmptyDrawable(ImageView iv)
{
    Drawable drawable = iv.getDrawable();
    BitmapDrawable bitmapDrawable = drawable instanceof BitmapDrawable ? (BitmapDrawable)drawable : null;

    return bitmapDrawable == null || bitmapDrawable.getBitmap() == null;
}

Moreover, looking at this behavior in the source code, one might suppose that null Drawble is something Android SDK developers try to avoid. That's why you should avoid relying on getDrawable() == null check in your code at all.

like image 41
Alexander Abakumov Avatar answered Dec 11 '22 10:12

Alexander Abakumov