Android에서 URI 작성기 사용 또는 변수로 URL 만들기
저는 안드로이드 앱을 개발하고 있습니다.API 요청을 하기 위해 앱에 대한 URI를 구축해야 합니다.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에 변수를 추가하는 더 쉬운 방법이 있습니까?
예를 들어 다음 URL을 생성하려고 합니다.
https://www.myawesomesite.com/turtles/types?type=1&sort=relevance#section-name
이를 사용하여 구축하려면 다음을 수행합니다.
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("www.myawesomesite.com")
.appendPath("turtles")
.appendPath("types")
.appendQueryParameter("type", "1")
.appendQueryParameter("sort", "relevance")
.fragment("section-name");
String myUrl = builder.build().toString();
를 사용하는 다른 방법이 있습니다.Uri
그리고 우리는 같은 목표를 달성할 수 있습니다.
http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
URI를 빌드하려면 다음을 사용할 수 있습니다.
final String FORECAST_BASE_URL =
"http://api.example.org/data/2.5/forecast/daily?";
final String QUERY_PARAM = "q";
final String FORMAT_PARAM = "mode";
final String UNITS_PARAM = "units";
final String DAYS_PARAM = "cnt";
당신은 이 모든 것을 위의 방법 또는 심지어 내부에서 선언할 수 있습니다.Uri.parse()
그리고.appendQueryParameter()
Uri builtUri = Uri.parse(FORECAST_BASE_URL)
.buildUpon()
.appendQueryParameter(QUERY_PARAM, params[0])
.appendQueryParameter(FORMAT_PARAM, "json")
.appendQueryParameter(UNITS_PARAM, "metric")
.appendQueryParameter(DAYS_PARAM, Integer.toString(7))
.build();
드디어
URL url = new URL(builtUri.toString());
- 출처 : Udacity Android 코스 / Sunshine 앱
위의 훌륭한 답변이 단순한 효용 방법으로 바뀌었습니다.
private Uri buildURI(String url, Map<String, String> params) {
// build url with parameters.
Uri.Builder builder = Uri.parse(url).buildUpon();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.appendQueryParameter(entry.getKey(), entry.getValue());
}
return builder.build();
}
여기 그것을 설명할 수 있는 좋은 방법이 있습니다.
URI에는 두 가지 형태가 있습니다.
1 - 작성기(수정 준비, 사용 준비 안 됨)
2 - 제작됨(수정할 준비가 되지 않음, 사용할 준비가 됨)
다음 방법으로 작성기를 작성할 수 있습니다.
Uri.Builder builder = new Uri.Builder();
이렇게 수정할 준비가 된 작성기를 반환합니다.
builder.scheme("https");
builder.authority("api.github.com");
builder.appendPath("search");
builder.appendPath("repositories");
builder.appendQueryParameter(PARAMETER_QUERY,parameterValue);
하지만 그것을 사용하기 위해서는 먼저 그것을 만들어야 합니다.
retrun builder.build();
또는 어떻게 사용하든 이미 구축되어 사용할 준비가 되었지만 수정할 수 없는 것을(를) 구축했습니다.
Uri built = Uri.parse("your URI goes here");
이것은 사용할 준비가 되었지만 수정하려면 On()을 빌드해야 합니다.
Uri built = Uri.parse("Your URI goes here")
.buildUpon(); //now it's ready to be modified
.buildUpon()
.appendQueryParameter(QUERY_PARAMATER, parameterValue)
//any modification you want to make goes here
.build(); // you have to build it back cause you are storing it
// as Uri not Uri.builder
이제 수정을 원할 때마다 Upon()을 빌드하고 최종 빌드()를 빌드해야 합니다.
따라서 Uri.Builder는 Builder를 저장하는 Builder 유형입니다.URI는 이미 빌드된 URI를 저장하는 빌드 유형입니다.
새 우리당작성자(); 작성자를 반환합니다.URI.parse("URI 여기로 이동")는 빌드를 반환합니다.
그리고 build()를 사용하여 Builder에서 Build로 변경할 수 있습니다. buildOn()을 사용하여 Build에서 Builder로 변경할 수 있습니다.다음은 당신이 할 수 있는 일입니다.
Uri.Builder builder = Uri.parse("URL").buildUpon();
// here you created a builder, made an already built URI with Uri.parse
// and then change it to builder with buildUpon();
Uri built = builder.build();
//when you want to change your URI, change Builder
//when you want to use your URI, use Built
그리고 그 반대도 마찬가지입니다.
Uri built = new Uri.Builder().build();
// here you created a reference to a built URI
// made a builder with new Uri.Builder() and then change it to a built with
// built();
Uri.Builder builder = built.buildUpon();
제 대답이 도움이 되었기를 바랍니다 :) <3.
의 예를 들어second
Answer
같은 URL에 이 기술을 사용했습니다.
http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("api.openweathermap.org")
.appendPath("data")
.appendPath("2.5")
.appendPath("forecast")
.appendPath("daily")
.appendQueryParameter("q", params[0])
.appendQueryParameter("mode", "json")
.appendQueryParameter("units", "metric")
.appendQueryParameter("cnt", "7")
.appendQueryParameter("APPID", BuildConfig.OPEN_WEATHER_MAP_API_KEY);
그런 다음 건축을 마친 후 그것을 다음과 같이 얻습니다.URL
▁this.
URL url = new URL(builder.build().toString());
그리고 연결을 엽니다.
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
그리고 만약 링크인 경우simple
예를 들어 위치 uri와 유사합니다.
geo:0,0?q=29203
Uri geoLocation = Uri.parse("geo:0,0?").buildUpon()
.appendQueryParameter("q",29203).build();
용사를 합니다.appendEncodePath()
할 수 .appendPath()
은 이: 다음코스을이다 URL니빌합.http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
Uri.Builder urlBuilder = new Uri.Builder();
urlBuilder.scheme("http");
urlBuilder.authority("api.openweathermap.org");
urlBuilder.appendEncodedPath("data/2.5/forecast/daily");
urlBuilder.appendQueryParameter("zip", "94043,us");
URL url = new URL(urlBuilder.build().toString());
최상의 답변: https://stackoverflow.com/a/19168199/413127
예:
http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
이제 코틀린과 함께
val myUrl = Uri.Builder().apply {
scheme("https")
authority("www.myawesomesite.com")
appendPath("turtles")
appendPath("types")
appendQueryParameter("type", "1")
appendQueryParameter("sort", "relevance")
fragment("section-name")
build()
}.toString()
람다 식을 사용하여 이 작업을 수행할 수 있습니다.
private static final String BASE_URL = "http://api.example.org/data/2.5/forecast/daily";
private String getBaseUrl(Map<String, String> params) {
final Uri.Builder builder = Uri.parse(BASE_URL).buildUpon();
params.entrySet().forEach(entry -> builder.appendQueryParameter(entry.getKey(), entry.getValue()));
return builder.build().toString();
}
그런 매개 변수를 만들 수 있습니다.
Map<String, String> params = new HashMap<String, String>();
params.put("zip", "94043,us");
params.put("units", "metric");
Btw. 만약 당신이 다음과 같은 문제에 직면한다면.“lambda expressions not supported at this language level”
이 URL을 확인하십시오.
https://stackoverflow.com/a/22704620/2057154
언급URL : https://stackoverflow.com/questions/19167954/use-uri-builder-in-android-or-create-url-with-variables
'programing' 카테고리의 다른 글
JavaScript 파일을 동적으로 로드합니다. (0) | 2023.08.06 |
---|---|
빠른 사전에서 키-값 쌍을 제거하는 방법은 무엇입니까? (0) | 2023.08.06 |
어떻게 마지막 5분의 기록을 조회할 수 있습니까? (0) | 2023.08.06 |
스크롤 막대를 항상 표시하는 방법 (0) | 2023.08.06 |
null이 아닌 최대 열 (0) | 2023.08.06 |