Obtener ruta de archivo y nombre de archivo de la imagen de la galería seleccionada en Android

Estoy creando una aplicación que carga una imagen seleccionada de la galería y la carga a un servicio web. El servicio web requiere el nombre de archivo de la imagen seleccionada más una codificación base64 del contenido del archivo. He logrado lograr esto con una ruta de archivo codificada. Sin embargo, estoy luchando para obtener la ruta de archivo real de la imagen. He leído en la web y tengo este código, pero no funciona para mí:

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (resultCode == RESULT_OK) {
     Uri selectedImageUri = data.getData();
     String[] projection = {MediaStore.Images.Media.DATA};

     try {
       Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null, null);
       cursor.moveToFirst();

       int columnIndex = cursor.getColumnIndex(projection[0]);
       String picturePath = cursor.getString(columnIndex);
       cursor.close();
       Log.d("Picture Path", picturePath);
     }
     catch(Exception e) {
       Log.e("Path Error", e.toString());
     }
   }
 }

Me sale este error:

java.lang.NullPointerException

EDITAR

Olvidé mencionar que estoy usando Kitkat. Parece que mi problema está relacionado con KitKat. Encontré esto (ver más abajo) que me ayudó a hacer que mi aplicación funcionara:

La Galería de Android en KitKat devuelve diferentes Uri para Intención.ACTION_GET_CONTENT

Respuestas a la pregunta(9)

Su respuesta a la pregunta