Я разрабатываю приложение для Android. Мне нужно создать URI для моего приложения, чтобы сделать запрос API. Если нет другого способа поместить переменную в URI, это самый простой способ, который я нашел. Я обнаружил, что вам нужно использовать Uri.Builder
, но я не совсем уверен, как это сделать. Мой URL-адрес:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value
Моя схема - http, права доступа lapi.transitchicago.com
, путь есть /api/1.0
, сегмент (ы) пути есть ttarrivals.aspx
, а строка запроса - key=[redacted]&mapid=value
.
Мой код ниже:
Intent intent = getIntent();
String value = intent.getExtras().getString("value");
Uri.Builder builder = new Uri.Builder();
builder.scheme("http")
.authority("www.lapi.transitchicago.com")
.appendPath("api")
.appendPath("1.0")
.appendPath("ttarrivals.aspx")
.appendQueryParameter("key", "[redacted]")
.appendQueryParameter("mapid", value);
Я понимаю, что могу сделать URI.add
, но как мне интегрировать это в Uri.Builder
? Должен ли я добавить все, как URI.add(scheme)
, URI.add(authority)
и так далее? Или это не способ сделать это? Кроме того, есть ли какой-либо другой более простой способ добавить переменную в URI / URL?
источник
appendPath()
для метода. Если это строка запроса (после?), ИспользуйтеappendQueryParameter()
. Посмотрите на URL, который я имею в примере, и что я делаю с каждым сегментом. Я также добавилtoString()
кbuild()
вызову, чтобы получить правильный тип обратно.Существует другой способ использования,
Uri
и мы можем достичь той же целиДля построения Uri вы можете использовать это:
Вы можете объявить все это вышеуказанным способом или даже внутри
Uri.parse()
иappendQueryParameter()
Наконец
источник
Отличный ответ сверху превратился в простой полезный метод.
источник
Вот хороший способ объяснить это:
Есть две формы URI
1 - Строитель (готов к модификации , не готов к использованию )
2 - Построен ( не готов к модификации , готов к использованию )
Вы можете создать застройщика
это вернет Строителя, готового к изменению следующим образом:
но чтобы использовать его, сначала нужно его построить
или как бы ты ни использовал его. а затем вы построили , что уже построен для вас, готовый к использованию , но не может быть изменен.
это готово к использованию, но если вы хотите изменить его, вам нужно buildUpon ()
теперь каждый раз, когда вы хотите изменить его, вам нужно buildUpon () и в конце build () .
поэтому Uri.Builder - это тип Builder, который хранит в нем Builder. Uri - это встроенный тип, в котором хранится уже созданный URI.
новый Uri.Builder (); rerurns Builder . Uri.parse («ваш URI идет сюда») возвращает Built .
и с помощью build () вы можете изменить его с Builder на Built . buildUpon () вы можете изменить его со встроенного на строительный . Вот что вы можете сделать
а также наоборот: -
надеюсь, мой ответ помог :) <3
источник
для примера в
second
Answer
я использовал эту технику для того же URLhttp://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
то после того, как достраивать его получить как
URL
таки открыть соединение
и если ссылка
simple
похожа на местоположение URI, например,geo:0,0?q=29203
источник
URL url = new URL(builder.build().toString());
должен быть обернут блоком try catch для MalformedURLExceptionИспользование
appendEncodePath()
может сэкономить вам несколько строк, чемappendPath()
, следующий фрагмент кода создает этот URL:http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
источник
Лучший ответ: https://stackoverflow.com/a/19168199/413127
Пример для
Теперь с Kotlin
источник
Вы можете сделать это с помощью лямбда-выражений;
и вы можете создавать такие параметры;
Btw. Если у вас возникнут какие-либо проблемы, как
“lambda expressions not supported at this language level”
, пожалуйста, проверьте этот URL;https://stackoverflow.com/a/22704620/2057154
источник