迭代请求的参数

时间:2016-10-27 09:07:37

标签: java get okhttp

我有一个

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()如何迭代地图。

4 个答案:

答案 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();