Вы должны URI-кодировать"недопустимые" символы. Поскольку строка на самом деле содержит полный URL-адрес, трудно правильно его кодировать по URI. Вы не знаете, какие косые черты /
следует учитывать, а какие нет. Вы не можете предсказать это на необработанном String
заранее. Проблема действительно должна быть решена на более высоком уровне. Откуда это String
? Это жестко закодировано? Тогда просто измените это самостоятельно соответственно. Это входит как пользовательский ввод? Подтвердите его и покажите ошибку, пусть пользователь решит сам.
В любом случае, если вы можете убедиться, что это только пробелов в URL-адресах, что делает его недействительным, то вы также можете просто заменить строку на строку %20
:
URI uri = new URI(string.replace(" ", "%20"));
Или, если вы можете гарантировать, что это только часть после последней косой черты, которая должна быть закодирована в URI, то вы также можете просто сделать это с помощью android.net.Uri
служебный класс:
int pos = string.lastIndexOf('/') + 1;
URI uri = new URI(string.substring(0, pos) + Uri.encode(string.substring(pos)));
Обратите внимание, что URLEncoder
не подходит для задачи, так как она предназначена для кодирования имен / значений параметров строки запроса согласно application/x-www-form-urlencoded
правилам (как используется в формах HTML). См. Также Java-кодирование параметров строки запроса .