Использование HttpUrl newBuilder (String) - PullRequest
1 голос
/ 07 октября 2019

Для создания нового экземпляра HttpUrl.Builder из существующего URL-адреса я использую HttpUrl.newBuilder (String) :

new HttpUrl().build().newBuilder(savedUrl)

, где saveUrl - строка, содержащая правильно сформированный URL-адрес.

Вышеупомянутый фрагмент падает в конструкторе HttpUrl из-за неопределенности схемы. В качестве обходного пути я использую существующий экземпляр HttpUrl - не идеально.

Вопросы:

  1. Является ли newBuilder (String) подходящим инструментом для работы?
  2. как правильно использовать newBuilder (String)?

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Используйте newBuilder(String) для разрешения относительных ссылок.

 HttpUrl.get("https://example.com/a.html")
     .newBuilder("b.html")
0 голосов
/ 07 октября 2019

Прежде всего, вы допустили логическую ошибку, создав сборщик, не задавая ему никаких свойств (немедленно вызвав build()), а затем создав другого построителя по заданному URL-адресу.

Я не смог заставить ваш код компилироваться, но этот сделал (вероятно, это то, что вы имели в виду):

HttpUrl.Builder().build().newBuilder("https://www.google.com")

Этот код не работает. И как вы описали, выдает «ошибка схемы». Итак, я посмотрел здесь, какой должна быть схема , и она может быть https или http.

Следующий код делает именно то, что вы хотите. Это только создает одного строителя. Вы можете подумать, что вы можете напрямую префиксить URL со схемой (поэтому хост будет https://www.google.com),, избегая установки свойства, но это не работает.

HttpUrl.Builder().scheme("https").host("www.google.com").build()
...