title: Saving image taken from camera into INTERNAL storage
body: <p>I just got started in Android Programming and I am creating an android application in which the user is allowed to key in information, take a picture with ImageView implemented and SAVE the information. I've gotten up to the point where I am able to display the image taken into ImageView. However, I am unable to save the image taken into my phone's internal storage. Which means, whenever I try to save the information, including the ImageView (image from camera), only the image disappears. I've followed this guide on <a href="http://www.androidhive.info/2013/09/android-working-with-camera-api/" rel="nofollow">http://www.androidhive.info/2013/09/android-working-with-camera-api/</a> but it does not work as my phone has no SD card storage. </p>
  
  <p>I've read a bunch of questions on here but they do not fix the problem.</p>
  
  <p>So if anyone could give me a detailed procedure on how to edit this code in such a way that I can save/read the image into/from my INTERNAL storage that would be great! Thank you. </p>
  
  <pre><code>/**
   * returning image / video
   */
  private static File getOutputMediaFile(int type) {
  
      // External sdcard location
      File mediaStorageDir = new File(
              Environment
                      .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
              IMAGE_DIRECTORY_NAME);
  
      // Create the storage directory if it does not exist
      if (!mediaStorageDir.exists()) {
          if (!mediaStorageDir.mkdirs()) {
              Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                      + IMAGE_DIRECTORY_NAME + " directory");
              return null;
          }
      }
  }
  </code></pre>
  
  <p>This is my current code:</p>
  
  <pre><code>private static final String IMAGE_DIRECTORY_NAME = "Hello Camera";
  private Uri fileUri; // file url to store image/video
  private ImageView ItemPic;
  private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100;
  public static final int MEDIA_TYPE_IMAGE = 1;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.new_entry);
  
      date = (EditText) findViewById(R.id.date);
      amount = (EditText) findViewById(R.id.amount);
      item = (EditText) findViewById(R.id.item);
  
      add = (Button) findViewById(R.id.add_b);
      add.setOnClickListener(onAdd);
  
      camera = (ImageButton) findViewById(R.id.camera);
      camera.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             // capture picture
             captureImage();
            //  Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
             // startActivityForResult(cameraIntent, CAMERA_REQUEST);
         }
     });
  
      ItemPic = (ImageView) findViewById(R.id.itempic);
  
      entryId = getIntent().getStringExtra("ID");
      if (entryId != null) {
          load();
      }
  }
  
      /*
   * Capturing Camera Image will lauch camera app requrest image capture
  */
  private void captureImage() {
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  
      fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
  
      intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
  
      // start the image capture Intent
      startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
  }
  
  /**
   * Here we store the file url as it will be null after returning from camera
   * app
   */
  @Override
  protected void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
  
      // save file url in bundle as it will be null on scren orientation
      // changes
      outState.putParcelable("file_uri", fileUri);
  }
  
  @Override
  protected void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);
  
      // get the file url
      fileUri = savedInstanceState.getParcelable("file_uri");
  }
  
  /**
   * Receiving activity result method will be called after closing the camera
   * */
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      // if the result is capturing Image
      if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
          if (resultCode == RESULT_OK) {
              // successfully captured the image
              // display it in image view
              previewCapturedImage();
          } else if (resultCode == RESULT_CANCELED) {
              // user cancelled Image capture
              Toast.makeText(getApplicationContext(),
                      "User cancelled image capture", Toast.LENGTH_SHORT)
                      .show();
          } else {
              // failed to capture image
              Toast.makeText(getApplicationContext(),
                      "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                      .show();
          }
      }
  }
  
  /**
   * Display image from a path to ImageView
   */
  private void previewCapturedImage() {
      try {
          ItemPic.setVisibility(View.VISIBLE);
  
          // bimatp factory
          BitmapFactory.Options options = new BitmapFactory.Options();
  
          // downsizing image as it throws OutOfMemory Exception for larger
          // images
          options.inSampleSize = 8;
  
          final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
                  options);
  
          ItemPic.setImageBitmap(bitmap);
  
      }  catch (NullPointerException e) {
          e.printStackTrace();
      }
  }
  
  /**
   * ------------ Helper Methods ----------------------
   * */
  
  /**
   * Creating file uri to store image/video
   */
  public Uri getOutputMediaFileUri(int type) {
      return Uri.fromFile(getOutputMediaFile(type));
  }
  
  
  /**
   * returning image / video
   */
  private static File getOutputMediaFile(int type) {
  
      // External sdcard location
      File mediaStorageDir = new File(
              Environment
                      .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
              IMAGE_DIRECTORY_NAME);
  
      // Create the storage directory if it does not exist
      if (!mediaStorageDir.exists()) {
          if (!mediaStorageDir.mkdirs()) {
              Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                      + IMAGE_DIRECTORY_NAME + " directory");
              return null;
          }
      }
  
      // Create a media file name
      String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
              Locale.getDefault()).format(new Date());
      File mediaFile;
      if (type == MEDIA_TYPE_IMAGE) {
          mediaFile = new File(mediaStorageDir.getPath() + File.separator
                  + "IMG_" + timeStamp + ".jpg");
      } else {
          return null;
      }
  
      return mediaFile;
  }
  </code></pre>