Android-как я могу преобразовать объект android.net.Uri в объект java.net.URI?

Спасибо за любую помощь.

Я пытаюсь получить объект FileInputStream на изображении, которое пользователь выбирает из галереи изображений. Это URI android, возвращаемый android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI

Содержание: // СМИ / внешние / изображения / СМИ / 3

Когда я пытаюсь создать объект URI Java из этого объекта, я получаю исключение IllegalArgumentException с описанием исключения. Ожидаемая схема файла в URI: content: // media / external / images / media / 3, тогда как URI android показывает схему как контент

Никогда не нашел решения для оригинального вопроса. Но если вам нужен поток байтов изображения в галерее картинок, этот фрагмент кода сделает это.

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes); ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray()); 

Solutions Collecting From Web of "Android-как я могу преобразовать объект android.net.Uri в объект java.net.URI?"

Вы можете использовать метод toString для android Uri в комбинации конструктора String Java URI .

 android.net.Uri auri = new android.net.Uri(what ever); java.net.URI juri = new java.net.URI(auri.toString()); 

Android URI | Java URI

Найден правильный способ открыть InputStream из URI контента:

 InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri); 

Это все!

Существует решение вашего первоначального вопроса (конвертировать Uri в URI):

  1. Получить реальный путь к файлу (посмотрите этот код: Получить имя файла и путь из URI из медиастора )

  2. Получите URI, используя реальный путь и конструктор: URI (String uri)

Если вам нужна дополнительная информация, посмотрите здесь:

Как удалить видео, записанное с использованием намерения с ACTION_VIDEO_CAPTURE?

Я голосовал за ответ jgilrincon. Я не могу комментировать из-за низкой репутации, и здесь идет дополнительная информация – вы можете использовать FileHelper.java из проекта Apache Cordova, у него есть функции, которые вам нужны для обработки файлов из строк Uri, учитывая также медиастор (и папка с ресурсами приложения )

В частности, этот метод обеспечивает InputStream из Uri:

 public static InputStream getInputStreamFromUriString(String uriString, Activity cordova) 

Поскольку построение String не работает, вы пытались просто построить его самостоятельно?

 android.net.URI auri = new android.net.URI(what ever); java.net.URI juri = new java.net.URI(auri.getSchema(), auri.getSchemaSpecificPart(), auri.getFragment()); 

Возможно, вы также захотите дважды проверить, что вы получаете достоверные данные из класса URI Android. Документы, перечисленные в моем другом ответе, обсуждают, как он почти не проверяет ошибки. Если есть infact ошибка, класс просто выплевывает мусор в любом случае и не бросает никаких исключений. Скорее всего, именно поэтому класс java, который делает валидацию, бросает исключение.