title: Uploading a File shows Null using ion library
body: <p>I am trying to upload a <strong>PDF file</strong> to server but am getting a Null toast according to my method , i tested the file path in a TextView is visible but when it comes to uplaoding it seems not seeing the <strong>PDF file</strong> , am using <code>ion library</code>. Below is my code sample.</p>
  
  <pre><code> public void uploadFile(final String selectedFilePath){
  
  
  
  
          final  ProgressDialog pd;
          pd = new ProgressDialog(MainActivity.this);
          pd.setMessage("Uploading ...");
          pd.setCancelable(false);
          pd.show();
          //File file = new File(this.getFilesDir().getAbsolutePath() + "/thesubdirectory/the.zip");
          File f = new File(getApplicationContext().getFilesDir().getAbsolutePath()+selectedFilePath);
  
  
          try {
              RandomAccessFile rf = new RandomAccessFile(f, "rw");
              rf.setLength(1024 * 1024 * 2);
          } catch (Exception e) {
              System.err.println(e);
          }
          File echoedFile = getFileStreamPath("echo");
              Ion.with(MainActivity.this)
                      .load(SERVER_URL)
                      .uploadProgressDialog(pd)
                      .setMultipartFile("uploaded_file",f)
                      .write(echoedFile)
                      .setCallback(new FutureCallback&lt;File&gt;() {
                          @Override
                          public void onCompleted(Exception e, File result) {
  
  
                              try {
  
                                  Toast.makeText(MainActivity.this, " " + result, Toast.LENGTH_LONG).show();
  
                                  System.out.println("Error  " + result);
  
                                  pd.dismiss();
  
                              } catch (Exception e1) {
                                  System.out.println("Error  " + e1);
                              }
                              pd.dismiss();
  
  
                          }
                      });
  
  
  
      }
  </code></pre>
  
  <p>This is the rest of code.</p>
  
  <pre><code>public class MainActivity extends AppCompatActivity {
      private static final int PICK_FILE_REQUEST = 1;
      private static final String TAG = MainActivity.class.getSimpleName();
      private String selectedFilePath;
      private String SERVER_URL = "http://192.168.43.104:8093/PoliceApp/FileUpload.aspx";
      ImageView ivAttachment;
  
  
      private ImageView imageView;
      private EditText firstname_edt,lastname_edt,email_edt,jobtitle_edt,source_edt;
      private TextView directory_txt,count_txt,upload_txt;
      private Button button;
      Future&lt;File&gt; uploading;
      ProgressDialog pd;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Enable global Ion logging
          Ion.getDefault(this).configure().setLogging("ion-sample", Log.DEBUG);
          setContentView(R.layout.activity_main);
  
  
  
          imageView= (ImageView)findViewById(R.id.imageView);
          firstname_edt=(EditText)findViewById(R.id.firstname_edt);
          lastname_edt=(EditText)findViewById(R.id.lastname_edt);
          email_edt=(EditText)findViewById(R.id.email_edt);
          jobtitle_edt=(EditText)findViewById(R.id.jobtitle_edt);
          source_edt=(EditText)findViewById(R.id.source_edt);
          button=(Button)findViewById(R.id.button);
          directory_txt=(TextView)findViewById(R.id.directory_txt);
          count_txt=(TextView)findViewById(R.id.count_txt);
          upload_txt=(TextView)findViewById(R.id.upload_txt);
  
          imageView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  showFileChooser();
              }
          });
  
          button.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  if(selectedFilePath != null){
                     // pd = ProgressDialog.show(MainActivity.this,"","Uploading File...",true);
                      uploadFile(selectedFilePath);
                      //  OnSendFileInfo();
                  }else{
                      Toast.makeText(MainActivity.this,"Please choose a File First",Toast.LENGTH_SHORT).show();
                  }
              }
          });
  
  
  
  
  
      }
  
  
      // Gallery pick
  
      private void showFileChooser() {
          Intent intent = new Intent();
          //sets the select file to all types of files
          intent.setType("*/*");
          //allows to select data and return it
          intent.setAction(Intent.ACTION_GET_CONTENT);
          //starts new activity to select file and return data
          startActivityForResult(Intent.createChooser(intent,"Choose File to Upload.."),PICK_FILE_REQUEST);
      }
  
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if(resultCode == Activity.RESULT_OK){
              if(requestCode == PICK_FILE_REQUEST){
                  if(data == null){
                      //no data present
                      return;
                  }
  
  
                  Uri selectedFileUri = data.getData();
                  selectedFilePath = FilePath.getPath(this,selectedFileUri);
                  Log.i(TAG,"Selected File Path:" + selectedFilePath);
  
                  if(selectedFilePath != null &amp;&amp; !selectedFilePath.equals("")){
                      directory_txt.setText(selectedFilePath);
                  }else{
                      Toast.makeText(this,"Cannot upload file to server",Toast.LENGTH_SHORT).show();
                  }
              }
          }
      }
  </code></pre>
  
  <p>This is the filepath class which  returns file path of Gallery image/ Document / Video / Audio</p>
  
  <pre><code>public class FilePath {
  
  
  
      /**
       * Method for return file path of Gallery image/ Document / Video / Audio
       *
       * @param context
       * @param uri
       * @return path of the selected image file from gallery
       */
  
      @TargetApi(19)
      public static String getPath(final Context context, final Uri uri) {
  
          // check here to KITKAT or new version
          final boolean isKitKat = Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.KITKAT;
  
          // DocumentProvider
          if (isKitKat &amp;&amp; DocumentsContract.isDocumentUri(context, uri)) {
  
              // ExternalStorageProvider
              if (isExternalStorageDocument(uri)) {
                  final String docId = DocumentsContract.getDocumentId(uri);
                  final String[] split = docId.split(":");
                  final String type = split[0];
  
                  if ("primary".equalsIgnoreCase(type)) {
                      return Environment.getExternalStorageDirectory() + "/"
                              + split[1];
                  }
              }
              // DownloadsProvider
              else if (isDownloadsDocument(uri)) {
  
                  final String id = DocumentsContract.getDocumentId(uri);
                  final Uri contentUri = ContentUris.withAppendedId(
                          Uri.parse("content://downloads/public_downloads"),
                          Long.valueOf(id));
  
                  return getDataColumn(context, contentUri, null, null);
              }
              // MediaProvider
              else if (isMediaDocument(uri)) {
                  final String docId = DocumentsContract.getDocumentId(uri);
                  final String[] split = docId.split(":");
                  final String type = split[0];
  
                  Uri contentUri = null;
                  if ("image".equals(type)) {
                      contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                  } else if ("video".equals(type)) {
                      contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                  } else if ("audio".equals(type)) {
                      contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                  }
  
                  final String selection = "_id=?";
                  final String[] selectionArgs = new String[] { split[1] };
  
                  return getDataColumn(context, contentUri, selection,
                          selectionArgs);
              }
          }
          // MediaStore (and general)
          else if ("content".equalsIgnoreCase(uri.getScheme())) {
  
              // Return the remote address
              if (isGooglePhotosUri(uri))
                  return uri.getLastPathSegment();
  
              return getDataColumn(context, uri, null, null);
          }
          // File
          else if ("file".equalsIgnoreCase(uri.getScheme())) {
              return uri.getPath();
          }
  
          return null;
      }
  
      /**
       * Get the value of the data column for this Uri. This is useful for
       * MediaStore Uris, and other file-based ContentProviders.
       *
       * @param context
       *            The context.
       * @param uri
       *            The Uri to query.
       * @param selection
       *            (Optional) Filter used in the query.
       * @param selectionArgs
       *            (Optional) Selection arguments used in the query.
       * @return The value of the _data column, which is typically a file path.
       */
      public static String getDataColumn(Context context, Uri uri,
                                         String selection, String[] selectionArgs) {
  
          Cursor cursor = null;
          final String column = "_data";
          final String[] projection = { column };
  
          try {
              cursor = context.getContentResolver().query(uri, projection,
                      selection, selectionArgs, null);
              if (cursor != null &amp;&amp; cursor.moveToFirst()) {
                  final int index = cursor.getColumnIndexOrThrow(column);
                  return cursor.getString(index);
              }
          } finally {
              if (cursor != null)
                  cursor.close();
          }
          return null;
      }
  
      /**
       * @param uri
       *            The Uri to check.
       * @return Whether the Uri authority is ExternalStorageProvider.
       */
      public static boolean isExternalStorageDocument(Uri uri) {
          return "com.android.externalstorage.documents".equals(uri
                  .getAuthority());
      }
  
      /**
       * @param uri
       *            The Uri to check.
       * @return Whether the Uri authority is DownloadsProvider.
       */
      public static boolean isDownloadsDocument(Uri uri) {
          return "com.android.providers.downloads.documents".equals(uri
                  .getAuthority());
      }
  
      /**
       * @param uri
       *            The Uri to check.
       * @return Whether the Uri authority is MediaProvider.
       */
      public static boolean isMediaDocument(Uri uri) {
          return "com.android.providers.media.documents".equals(uri
                  .getAuthority());
      }
  
      /**
       * @param uri
       *            The Uri to check.
       * @return Whether the Uri authority is Google Photos.
       */
      public static boolean isGooglePhotosUri(Uri uri) {
          return "com.google.android.apps.photos.content".equals(uri
                  .getAuthority());
      }
  }
  </code></pre>