我有一个
Map<String,String> params = .....
使用GET请求参数的键+值。
构建HttpUrl看起来像这样:
HttpUrl httpUrl = new HttpUrl.Builder()
.scheme("https")
.host("example.com")
.addEncodedPathSegment("path")
.addQueryParameter("name","John Doe")
.build();
如何将params
中的(未知的预先和/或变量)参数添加到HttpUrl中,即迭代params
中的值并为每个键+值调用addQueryParameter
?
编辑抱歉我不够具体:我需要知道我是否可以在某个循环中反复调用.addQueryParameter()
,不如何迭代地图。
答案 0 :(得分:2)
如果你想迭代你的params Map,你可以这样做:
Map<String, String> params = .....
for (Map.Entry<String, String> entry : params.entrySet())
{
httpUrl.addQueryParameter(entry.getKey(),entry.getValue());
}
答案 1 :(得分:2)
有关示例,请参阅HttpUrl Javadoc。
HttpUrl url = HttpUrl.parse("https://twitter.com/search?q=cute%20%23puppies&f=images");
for (int i = 0, size = url.querySize(); i < size; i++) {
System.out.println(url.queryParameterName(i) + ": " + url.queryParameterValue(i));
}
答案 2 :(得分:1)
Map<String,String> params = new HashMap<>();
params.put("p1","a");
params.put("p2","b");
params.put("p3","c");
您可以使用:
paramString = urlEncodeUTF8(params)
它将返回“p1 = a&amp; p2 = b&amp; p3 = c”。 您将其附加到网址的底部。
url = "https//example.com?" + paramString
答案 3 :(得分:0)
要使它工作,必须从HttpUrl.builder开始:
HttpUrl.Builder httpUrlBuilder = new HttpUrl.Builder()
.scheme("https")
.host("example.com");
然后添加参数:
for (Map.Entry<String,String> entry: params.entrySet()) {
httpUrlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
}
最后构建请求:
HttpUrl httpUrl = httpUrlBuilder.build();
Request request = new Request.Builder()
.url(httpUrl)
.get()
.build();