title: Image Upload using intent
body: <p>I'm trying to upload an image for my android mobile application. The code is working fine for a image that was uploaded from the Gallery Folder. But If I select any image from "Recent Images", "Documents", "Downloads" the image path was not extracted and couldn't upload the image. Can you please help me how I can solve this issue.</p>
  
  <p>Here's my coding for your reference:</p>
  
  <pre><code>package com.example.imageupload;
  
  
  
  public class MainActivity extends Activity {
  
      private ImageView image;
      private Button uploadButton;
      private Bitmap bitmap;
      private Button selectImageButton, takeImageButton;
      String link = uri;
      // number of images to select
      private static final int PICK_IMAGE = 1;
      private static final int CAMERA_REQUEST = 1888;
  
      /**
       * called when the activity is first created
       */
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
  
          // find the views
          image = (ImageView) findViewById(R.id.uploadImage);
          uploadButton = (Button) findViewById(R.id.uploadButton);
          takeImageButton = (Button) findViewById(R.id.takeImageButton);
          selectImageButton = (Button) findViewById(R.id.selectImageButton);
  
          selectImageButton.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  selectImageFromGallery();
  
              }
          });
  
  
          // when uploadButton is clicked
          uploadButton.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
                  // new ImageUploadTask().execute();
                  Toast.makeText(MainActivity.this, "clicked", Toast.LENGTH_SHORT)
                          .show();
                  uploadTask();
              }
          });
      }
  
      protected void uploadTask() {
          // TODO Auto-generated method stub
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          bitmap.compress(CompressFormat.JPEG, 100, bos);
          byte[] data = bos.toByteArray();
          String file = Base64.encodeToString(data, 0);
          Log.i("base64 string", "base64 string: " + file);
          new ImageUploadTask(file).execute();
      }
  
      /**
       * Opens dialog picker, so the user can select image from the gallery. The
       * result is returned in the method &lt;code&gt;onActivityResult()&lt;/code&gt;
       */
      public void selectImageFromGallery() {
          Intent intent = new Intent();
          intent.setType("image/*");
          intent.setAction(Intent.ACTION_GET_CONTENT);
          startActivityForResult(Intent.createChooser(intent, "Select Picture"),
                  PICK_IMAGE);
      }
  
      /**
       * Retrives the result returned from selecting image, by invoking the method
       * &lt;code&gt;selectImageFromGallery()&lt;/code&gt;
       */
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
  
          if (requestCode == PICK_IMAGE &amp;&amp; resultCode == RESULT_OK
                  &amp;&amp; null != data) {
  
              Uri selectedImage = data.getData();
              String[] filePathColumn = { MediaStore.Images.Media.DATA };
  
              /*
               * Cursor cursor = getContentResolver().query(selectedImage,
               * filePathColumn, null, null, null);
               */
  
              Cursor cursor = managedQuery(selectedImage, filePathColumn, null,
                      null, null);
              cursor.moveToFirst();
  
              // int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
              int columnIndex = cursor
                      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
              cursor.moveToFirst();
              String picturePath = cursor.getString(columnIndex);
              Log.i("picturePath", "picturePath: " + picturePath);
              cursor.close();
  
              decodeFile(picturePath);
  
          }   }
  
  
      public void decodeFile(String filePath) {
          // Decode image size
          BitmapFactory.Options o = new BitmapFactory.Options();
          o.inJustDecodeBounds = true;
          BitmapFactory.decodeFile(filePath, o);
  
          // The new size we want to scale to
          final int REQUIRED_SIZE = 1024;
  
          // Find the correct scale value. It should be the power of 2.
          int width_tmp = o.outWidth, height_tmp = o.outHeight;
          int scale = 1;
          while (true) {
              if (width_tmp &lt; REQUIRED_SIZE &amp;&amp; height_tmp &lt; REQUIRED_SIZE)
                  break;
              width_tmp /= 2;
              height_tmp /= 2;
              scale *= 2;
          }
  
          // Decode with inSampleSize
          BitmapFactory.Options o2 = new BitmapFactory.Options();
          o2.inSampleSize = scale;
          bitmap = BitmapFactory.decodeFile(filePath, o2);
  
          image.setImageBitmap(bitmap);
      }
  
      /**
       * The class connects with server and uploads the photo
       * 
       * 
       */
      class ImageUploadTask extends AsyncTask&lt;Void, Void, String&gt; {
  
          String base64_string;
  
          public ImageUploadTask(String file) {
              // TODO Auto-generated constructor stub
              this.base64_string = file;
          }
  
          @Override
          protected String doInBackground(Void... params) {
              // TODO Auto-generated method stub
  
              ArrayList&lt;NameValuePair&gt; postData;
              postData = new ArrayList&lt;NameValuePair&gt;();
  
              JSONObject parentData = new JSONObject();
              JSONObject childData = new JSONObject();
  
              try {
  
                  childData.put("fileContent", base64_string);
                  childData.put("fileName", "droid.jpeg");
                  childData.put("fileType", "I");
  
                  // System.out.println(childData);
  
                  parentData.put("mobile", childData);
  
                  System.out.println(parentData);
  
              } catch (JSONException e) {
                  e.printStackTrace();
              }
  
              // postData.add(new BasicNameValuePair("User",
              // childData.toString()));
  
              InputStream is = null;
              String jsonResponse = "";
              JSONObject jObj = null;
  
              try {
  
                  DefaultHttpClient httpClient = new DefaultHttpClient();
  
                  HttpPost request = new HttpPost(
                          "URL");
  
                  request.setHeader("Content-Type", "application/json");
                  request.setEntity(new StringEntity(parentData.toString()));
  
                  HttpResponse httpResponse = httpClient.execute(request);
                  System.out.println(httpResponse);
  
                  // HttpResponse httpResponse = httpClient.execute(httpPost);
                  HttpEntity httpEntity = httpResponse.getEntity();
                  System.out.println(httpEntity);
                  is = httpEntity.getContent();
                  System.out.println(is);
                  System.out.println(is.toString());
  
                  try {
                      Log.e("@@@@@@@@@@", "@@@@@@@@@@@");
                      BufferedReader reader = new BufferedReader(
                              new InputStreamReader(is, "iso-8859-1"), 8);
                      StringBuilder sb = new StringBuilder();
                      String line = null;
                      while ((line = reader.readLine()) != null) {
                          sb.append(line + "\n");
                      }
                      is.close();
                      jsonResponse = sb.toString();
                      Log.e("JSON", "Check Json: " + jsonResponse);
  
                  } catch (Exception e) {
                      Log.e("Buffer Error",
                              "Error converting result " + e.toString());
                  }
  
              } catch (UnsupportedEncodingException e) {
                  e.printStackTrace();
              } catch (ClientProtocolException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
  
              return null;
          }
  
      }
  }
  </code></pre>