Crear archivo de tipo android de Uri

Estoy tratando de seleccionar la imagen de la galería a continuación, convertir esta imagen a archivo y enviarlo a través de HttpPost pero estoy recibiendo siempre FileNotFoundException . Este mi Código:

Selección de la foto

 public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == 1) { // currImageURI is the global variable I'm using to hold the content: currImageURI = data.getData(); //Save the currImageUri (URI type) to global variable. photosHolder.getInstance().setOneIm(currImageURI); } } } 

Conversión de la foto

  // First Try File myFile = new File((photosHolder.getInstance().getOneIm()).toString()); params.put("visit_report[photos_attributes][0][file]",myFile); **The exception Raised here // second try File myFile2 = new File((photosHolder.getInstance().getOneIm()).getPath()); params.put("visit_report[photos_attributes][1][file]",myFile2); ** Also here 

Y ésos son myFiles Value mientras depura:

 mFile : content:/com.android.providers.media.documents/document/image%3A19143 myFile2 : /document/image:19143 

Así que cualquier ayuda?


Actualización He intentado esta solución también:

 //get The real path from uri then save it (and then use it to create the file) photosHolder.getInstance().setUriString(getRealPathFromURI(currImageURI)); //Convert the image URI to the direct file system path of the image file private String getRealPathFromURI(Uri contentURI) { String result = ""; try { Cursor cursor = getActivity().getContentResolver().query(contentURI, null, null, null, null); if (cursor == null) { // Source is Dropbox or other similar local file path result = contentURI.getPath(); } else { cursor.moveToFirst(); int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); result = cursor.getString(idx); // Exception raised HERE cursor.close(); } } catch (Exception e) { e.printStackTrace(); } return result; } 

Pero conseguí java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it y el idx var == a -1

También he intentado @Praneeth Kalluri Solution pero devuelve siempre null como resultado.

  Uri currImageURI = data.getData(); 

Imprimir currImageURI le dará algo como esto:

 content://media/external/images/media/47 

Pero lo que necesitamos es el camino absoluto de esa imagen particular. Así que necesitamos obtener el camino real de uri

 public String getRealPathFromURI(Context context, Uri contentUri) { Cursor cursor = null; try { String[] proj = { MediaStore.Images.Media.DATA }; cursor = context.getContentResolver().query(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } finally { if (cursor != null) { cursor.close(); } } } 

Ahora modifica tu código como

 public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == 1) { // currImageURI is the global variable I'm using to hold the content: currImageURI = data.getData(); //Save the currImageUri (URI type) to global variable. photosHolder.getInstance().setOneIm(getRealPathFromURI(getActivity(),currImageURI)); } } } public String getRealPathFromURI(Context context, Uri contentUri) { Cursor cursor = null; try { String[] proj = { MediaStore.Images.Media.DATA }; cursor = context.getContentResolver().query(contentUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } finally { if (cursor != null) { cursor.close(); } } } 
  • Android Webview método shouldOverrideUrlLoading
  • ¿por qué java.net.UnknownHostException: Host no está resuelto: webservername.com:80?
  • Android camera: Fallo en la entrega del resultado ResultInfo {who = null, request = 0, result = -1, data = null} a la actividad
  • Cambiar URI de MediaPlayer
  • Convertir archivo: Uri a archivo en Android
  • ¿Cómo obtener el tono de llamada actual en Android?
  • Phonegap resolveLocalFileSystemURL no funciona para el contenido de uri en android
  • Cómo convertir una cadena en un android.net.Uri
  • Filtro de intenciones usando path, pathPrefix o pathPattern
  • Android Cómo obtener información de ID de una sola canción desde un URI conocido
  • ¿Hay lejos para conseguir uri del mapa de bits con hacia fuera excepto él a sdcard?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.