Joseph Anderson
Joseph Anderson

Reputation: 4144

Android ImageView SDCard

I am trying to read an image file from /mnt/sdcard/image.jpg into my ImageView. Here is my code:

Bitmap bmp = BitmapFactory.decodeFile("/mnt/sdcard/image.jpg");     
webImage.setImageBitmap(bmp);

I have write external storage permission.

My code says bmp is null, even though the image resides in the root directory (I go to I Drive and image.jpg is there.)

What am I doing incorrectly?

Upvotes: 0

Views: 2533

Answers (5)

Joseph Anderson
Joseph Anderson

Reputation: 4144

Thanks, I managed to resolve it. Here is what I found:

  1. I went to project > clean
  2. I disconnected the phone from the computer. When it is connected, the SD is mounted and you can't view data.
  3. The image name can't start with numbers. I am using SDK 7.
  4. I viewed LogCat and I didn't get any errors, however, saving to other system areas (like /Android/Data/) caused a FileNotFoundException - permissions error.

    File destination = new File(Environment.getExternalStorageDirectory(), "image" + 
    DateHelper.getTodaysDate() + "_" + DateHelper.getCurrentTime() + ".jpg");
    
    private View.OnClickListener listener = new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Add extra to save full-image somewhere
        intent.putExtra(MediaStore.EXTRA_OUTPUT,
      Uri.fromFile(destination));
        startActivityForResult(intent, REQUEST_IMAGE);
      }
    };
    

Upvotes: 1

Debarati
Debarati

Reputation: 3286

Your code is perfectly okay. Just check whether you are writing proper sd card path or not. May be for that reason you are getting null bitmap.

And "write external storage permission" is for writing to your sd card not for reading from sd card. Make this concept clear.

Upvotes: 0

King RV
King RV

Reputation: 3770

There could be two cases:

1) If you image is in the root folder of sdcard then it is possible to to access it through

 Environment.getExternalStorageDirectory().toString + File.separator + "yourimage.jpg"

2) But i guess in your case it is in the /mnt/sdcard/external_sd which your memory card of the device in that case try this:

Environment.getExternalStorageDirectory().toString + File.separator + "external_sd"  + File.separator + "yourimage.jpg"

Replace the above two paths with yours in BitmapFactory.decodeFile("Replace Here...")

Upvotes: 2

user658042
user658042

Reputation:

I suspect the card with the image isn't mounted under /mnt/sdcard/.

Since you are using a Motorola device, chances are that you have two mass storage devices (see this list, if your device is in there, this is the case). In this situation you have to use the Motorola "External" Storage API to get the path to your second mass storage.

Also in general: You can't rely on hardcoding paths to the SD-Card like this. The mountpoint differs across devices. Or might be named differently, some devices might have a flash storage instead of a card, and so on. In short: What works on your phone breaks on others. You can read a reliable path to the primary external storage by calling Environment.getExternalStorageDirectory() instead.

Upvotes: 1

WarrenFaith
WarrenFaith

Reputation: 57702

Please check you LogCat for more information.

My guess is you have a Samsung device. Samsung tends to have an external_sd folder, so you might have added it to the wrong sdcard because Samsung often has an internal and an external one.

Upvotes: 0

Related Questions