Строгий ответ: у вас никогда не должно быть фигурных скобок в вашем URL
Полное описание действительных URL можно найти в RFC1738
Соответствующая часть дляЭтот ответ выглядит следующим образом:
Небезопасно:
Символы могут быть небезопасны по ряду причин.Символ пробела
небезопасен, поскольку значительные пробелы могут исчезнуть, а незначительные пробелы
могут быть введены, когда URL-адреса транскрибируются или
набираются или подвергаются обработке программ обработки текста.
Символы "<"и ">" небезопасны, поскольку они используются в качестве разделителей
вокруг URL в свободном тексте;знак кавычки ("" ") используется для
разграничения URL-адресов в некоторых системах. Символ" # "небезопасен и всегда должен быть закодирован, поскольку он используется в World Wide Web и в других системах
для разграниченияURL из идентификатора фрагмента / якоря, который может следовать за ним. Символ "%" небезопасен, поскольку он используется для кодирования
других символов. Другие символы небезопасны, поскольку, как известно, иногда изменяются шлюзы
и другие транспортные агенты
таких символов. Это символы "{", "}", "|", "\", "^", "~",
"[", "]" и "` ".
Все небезопасные символы всегда должны быть закодированы в URL. Например,
, символ "#" должен быть закодирован в URL даже в
системах, которые обычно не имеют дело с фрагментом или якорем
идентификаторы, поэтому, если URL-адрес копируется в другую систему, которая
использует их, нет необходимости изменять кодировку URL-адреса.
Чтобы обойти проблему, с которой вы столкнулисьты должензакодируйте ваш URL.
Проблема, с которой вы столкнулись с ошибкой "host not not null", произойдет, когда весь URL кодируется, включая часть https://mydomain.com/, что может привести к путанице.Вы хотите кодировать только последнюю часть URL-адреса, называемую путем.
Решение состоит в том, чтобы использовать класс Uri.Builder для создания URI из отдельных частей, которые должны кодировать путь в процессе
Подробное описание вы найдете в справочной документации Android SDK Uri.Builder
Вот несколько простых примеров использования ваших значений:
Uri.Builder b = Uri.parse("https://mydomain.com").buildUpon();
b.path("/abc/{5D/{B0blhahblah-blah}I1.jpg");
Uri u = b.build();
Или вы можетеиспользовать цепочку:
Uri u = Uri.parse("https://mydomain.com").buildUpon().path("/abc/{5D/{B0blhahblah-blah}I1.jpg").build();