Intereting Posts
Как получить цвет из шестнадцатеричной строки цвета Получить сгенерированный идентификатор после вставки Ошибка «id не может быть разрешена или не поле»? FindFragmentByTag () возвращает null после выполнения FragmentTransaction с использованием метода replace () Где я должен помещать файл шрифта в ресурсы Android? Исключение мертвых объектов Android Как я могу сделать ProgressDialog отменой кнопки назад, но не с помощью экрана? Как отключить историю совместного использования при использовании ShareActionProvider? Отключите панель уведомлений Перенос аккаунта AdMob и учетная запись AdSense Android Включить TLSv1.2 в OKHttp Ошибка: createWindowSurface не удалось выполнить EGL_BAD_ALLOC Вы можете отслеживать, когда андроидное приложение было прекращено? LinearAlloc превысила емкость (5242880), last = 1092 Ошибка при установке на моем планшетном устройстве Samsung Google Drive Implimentation для Android-приложения и загрузка файла с диска Google

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, который делает валидацию, бросает исключение.