2017-01-22 3 views
-1

У меня есть приложение для Android, над которым я работаю, и теперь я пытаюсь получить файл из URI (я буду использовать намерение получить изображение из галереи, а затем загрузить его на сервер node.js с использованием Ion). Проблема заключается в том, что он всегда выдает исключение. Я попробовал отладку и получил Uri.toString(). Это выглядит вроде как это:Получить путь от исключения URI throws

content://com.android.providers.media.documents/document/image%3A102 

Я знаю, за то, что он должен выглядеть следующим образом:

content://com.android.providers.media.documents/document/image:102 

Я знаю, что% 3A является представление:, но почему это делает появляются в Uri и, как я могу это исправить? Наконец, как я могу получить свой файл из этого Uri?

+0

Его шестнадцатеричное представление: в uri все специальные символы преобразуются в шестнадцатеричное представление. – Sreemat

ответ

0

я пытаюсь получить файл из URI

Uri не является файлом. A Uri не должен указывать на что-либо в файловой системе, не говоря уже о том месте, к которому вы можете получить доступ.

, но почему он появляется в Ури

Uri является непрозрачной ручкой. Это может быть то, что хочет ContentProvider.

как я могу это исправить?

Вы не делаете, не больше, чем вы «исправить» https://stackoverflow.com/questions/41795342/get-path-from-uri-throws-exception потому, что вам не нравится восемь цифр номера, начинающиеся с 4. Подобно тому, как веб-сервер переполнения стека определяет используемые им URL-адреса, определяет Uri значения, которые он использует.

Наконец, как я могу получить свой файл из этого Uri?

В идеале вы этого не сделаете. Вы используете ContentResolver и openInputStream(), чтобы получить InputStream по содержанию, указанному этим Uri, и Ion использует это.

Если Ion не поддерживает это и может работать только с файлами, используйте InputStream скопировать байты в какой-то FileOutputStream, что вы контролируете (например, в getCacheDir()). Используйте этот файл для загрузки, а затем удалите файл, когда закончите.

Смежные вопросы