- Java — Convert String to valid URI object
- 11 Answers 11
- URI (Uniform Resource Identifier)
- Координаты
- Номер телефона
- Контакты
- Use URI builder in Android or create URL with variables
- 8 Answers 8
- Android: Как разобрать строку URL с пробелами для объекта URI?
- 5 ответов:
- Преобразование файла: Uri в файл в Android
- 15 ответов
Java — Convert String to valid URI object
I am trying to get a java.net.URI object from a String . The string has some characters which will need to be replaced by their percentage escape sequences. But when I use URLEncoder to encode the String with UTF-8 encoding, even the / are replaced with their escape sequences.
How can I get a valid encoded URL from a String object?
http://www.google.com?q=a b gives http%3A%2F%2www.google.com. whereas I want the output to be http://www.google.com?q=a%20b
Can someone please tell me how to achieve this.
I am trying to do this in an Android app. So I have access to a limited number of libraries.
11 Answers 11
You might try: org.apache.commons.httpclient.util.URIUtil.encodeQuery in Apache commons-httpclient project
You can of course do it yourself, but URI parsing can get pretty messy.
You can simply do something like:
I’m going to add one suggestion here aimed at Android users. You can do this which avoids having to get any external libraries. Also, all the search/replace characters solutions suggested in some of the answers above are perilous and should be avoided.
Give this a try:
You can see that in this particular URL, I need to have those spaces encoded so that I can use it for a request.
This takes advantage of a couple features available to you in Android classes. First, the URL class can break a url into its proper components so there is no need for you to do any string search/replace work. Secondly, this approach takes advantage of the URI class feature of properly escaping components when you construct a URI via components rather than from a single string.
The beauty of this approach is that you can take any valid url string and have it work without needing any special knowledge of it yourself.
Источник
URI (Uniform Resource Identifier)
URI — это специальный идентификатор, по которому можно определить абстрактный или физический ресурс. Самый понятный пример с URI — это обычная веб-страница. Возьмём к примеру страницу http://developer.alexanderklimov.ru/android/catshop/catshop.php. Данный адрес можно разбить на несколько частей:
- Scheme — http
- Scheme-specific part — //developer.alexanderklimov.ru/android/catshop/catshop.php
- Path — /android/catshop/
У протокола http есть и другие параметры, которые рассматривать не будем. Существует также протокол ftp, имеющий свои параметры. Ниже вы увидите другие примеры. Главное здесь — возможность определить нахождение ресурса по представленным данным.
Допустим, мы хотим загрузить видеоматериал в компонент VideoView. Само видео может находиться в ресурсах программы или на SD-карте. С помощью URI мы можем подсказать программе, откуда следует загрузить файл.
Например, если видеофайл playcat.3gp находится в папке /res/raw, то получить адрес для загрузки можно следующим образом:
Если файл хранится на внешней карточке, то код будет следующим (опустим правильное определение имени карточки):
У компонента VideoView есть метод setVideoURI(URI uri), в котором нужно указать объект класса URI:
Посмотрим на другие примеры:
Координаты
Метод uri.getScheme() вернёт geo, а метод uri.getSchemeSpecificPart() — 54.354183,37.34011.
Номер телефона
В данном случае метод uri.getScheme() вернёт tel, а uri.getSchemeSpecificPart() — 1234578.
Контакты
URI также используется при работе с контент-провайдерами, в частности, с контактами.
Источник
Use URI builder in Android or create URL with variables
I’m developing an Android app. I need to build a URI for my app to make an API request. Unless there’s another way to put a variable in a URI, this is the easiest way I’ve found. I found that you need to use Uri.Builder , but I’m not quite sure how to. My url is:
My scheme is http, authority is lapi.transitchicago.com , path is /api/1.0 , path segment(s) is ttarrivals.aspx , and query string is key=[redacted]&mapid=value .
My code is below:
I understand that I can do URI.add , but how do I integrate it into the Uri.Builder ? Should I add everything like URI.add(scheme) , URI.add(authority) and so on? Or is that not the way to do it? Also, is there any other easier way to add a variable to a URI/URL?
8 Answers 8
Let’s say that I want to create the following URL:
To build this with the Uri.Builder I would do the following.
There is another way of using Uri and we can achieve the same goal
To build the Uri you can use this:
You can declare all this the above way or even inside the Uri.parse() and appendQueryParameter()
Excellent answer from above turned into a simple utility method.
here is a good way to explain it:
there are two forms of the URI
1 — Builder(ready to be modified, not ready to be used)
2 — Built(not ready to be modified, ready to be used )
You can create a builder by
this gonna return a Builder ready to be modified like this:-
but to use it you have to build it first
or however you gonna use it. and then you have built that is already built for you, ready to use but cannot be modified.
this is ready to use but if you want to modify it you need to buildUpon()
now every time you want to modify it you need to buildUpon() and in the end build().
so Uri.Builder is a Builder type that store a Builder in it. Uri is a Built type that store an already built URI in it.
new Uri.Builder(); rerurns a Builder. Uri.parse(«your URI goes here») returns a Built.
and with build() you can change it from Builder to Built. buildUpon() you can change it from Built to Builder. Here is what you can do
Источник
Android: Как разобрать строку URL с пробелами для объекта URI?
у меня есть строка, представляющая URL-адрес, содержащий пробелы, и я хочу преобразовать его в объект URI. Если просто попробуйте сделать
где индекс X это позиция первого пробела в строке адреса.
как я могу распарсить myString на
5 ответов:
вы должны на самом деле URI-encode «неправильные» символы. Поскольку строка фактически содержит полный URL-адрес, ее трудно правильно кодировать URI. Вы не знаете, какие косые черты / должны быть приняты во внимание, а какие нет. Вы не можете предсказать, что на сырье String заранее. Проблема действительно должна быть решена на более высоком уровне. Откуда это String откуда? Это жестко? Тогда просто измените его самостоятельно соответственно. Он входит в качестве пользовательского ввода? Проверьте его и показать ошибку, пусть пользователь решить сам.
в любом случае, если вы можете убедиться, что это только пробелы в URL-адресах, что делает его недействительным, то вы также можете просто сделать строку за строкой заменить на %20 :
или если вы можете гарантировать, что это только часть после последней косой черты, которая должна быть закодирована URI, то вы также можете просто сделать это с помощью android.net.Uri утилиты класс:
отметим, что URLEncoder является неустранимым для задачи, поскольку он предназначен для кодирования имен/значений параметров строки запроса в соответствии с application/x-www-form-urlencoded правила (как используется в HTML-формах). Смотрите также кодировка Java URL параметров строки запроса.
finalPartOfString — это часть после последнего Слэша — в вашем случае, название песни, как кажется.
Источник
Преобразование файла: Uri в файл в Android
какой самый простой способ конвертировать из file: android.net.Uri до File В Android?
пробовал следующее, Но это не работает:
15 ответов
то, что вы хотите.
Примечание: uri.toString() возвращает строку в формате: «file:///mnt/sdcard/myPicture.jpg» , тогда как uri.getPath() возвращает строку в формате: «/mnt/sdcard/myPicture.jpg» .
после долгого поиска это то, что сработало для меня:
EDIT: Извините, я должен был протестировать лучше раньше. Это должно сработать:
ничего из этого не работает для меня. Я нашел это рабочим решением. но мой случай специфичен для изображений.
непосредственно и скопируйте файл. См. также:
С Котлином еще проще:
Я сделал это следующим образом:
поэтому в основном сначала я пытаюсь использовать файл, т. е. снимок, сделанный камерой и сохраненный на SD-карте. Это не работает для изображения возвращаемых: Intent photoPickerIntent = новое намерение(намерение.ACTION_PICK); В этом случае необходимо преобразовать Uri в реальный путь по
@CommonsWare объяснил все вещи довольно хорошо. И мы действительно должны использовать предложенное им решение.
кстати, только на информацию мы могли положиться, когда quering ContentResolver — Это имя и размер файла, как указано здесь: получение информации о файле / разработчики Android
как вы могли видеть, есть интерфейс OpenableColumns который содержит только два поля: DISPLAY_NAME и SIZE.
в моем случае мне нужно было получить информацию EXIF о JPEG изображение и повернуть его, если это необходимо перед отправкой на сервер. Для этого я скопировал содержимое файла во временный файл с помощью ContentResolver и openInputStream()
Лучшим Решением
создайте один простой класс java FileUtil и используйте для создания, копирования и переименования файла
Я использую uri.toString() и uri.getPath() но не работает для меня. Я наконец нашел решение.
пользовательский класс FileUtil в вашем коде
вы можете получить файл из файла Uri, используя следующий метод. Он DocumentFile для параметра, но вы можете легко изменить его. Самый простой способ проверить этот метод для создания файла uri с помощью DocumentFile.fromFile(Environment.getExternalStorageDirectory()); который имеет Uri file:///storage/emulated/0
вместо создания файлов из Uri используйте DocumentFile.fromTreeUri(Context, Uri) или DocumentFile.fromSingleri(Context, Uri) для создания или удаления файлов и для потоков используйте getContentResolver().openOutputStream(documentFile.getUri()) и getContentResolver().openInputStream(documentFile.getUri()) для записи файлов и чтения файлов.
публичная строка getRealPathFromURI(Uri uri) <
затем, используя для получения файла из URI:
— НАДЕЖДА МОЖЕТ ПОМОЧЬ ВАМ — — — —
Android + Котлин
добавить зависимость для расширений Kotlin Android:
получить файл из uri:
Android + Java
просто переместить наверх 😉
следующим кодом я могу получить общий pdf-файл adobe application в виде потока и сохранить его в путь приложения android
для людей, которые ищут решение для изображений в частности вот это.
Источник