2016-10-27 2 views
0

Ich habe einIterate über Parameter für die Anfrage

Map<String,String> params = ..... 

mit der Taste + Wert für die Parameter für eine GET-Anfrage.

ein HttpUrl Gebäude sieht ungefähr so ​​aus:

HttpUrl httpUrl = new HttpUrl.Builder() 
       .scheme("https") 
       .host("example.com") 
       .addEncodedPathSegment("path") 
       .addQueryParameter("name","John Doe") 
       .build(); 

wie füge ich die (unbekannt vorher und/oder variabel) Parameter in params zum HttpUrl, also iterieren die Werte in params und rufen für jeder Schlüssel + Wert?

EDIT traurig, dass ich nicht spezifisch genug war: Ich muss wissen, ob ich irgendwie .addQueryParameter() wiederholt in einer Schleife aufrufen können, nicht wie eine Karte iterieren.

Antwort

0

Denn es zur Arbeit eines mit einem HttpUrl.builder beginnen muss:

HttpUrl.Builder httpUrlBuilder = new HttpUrl.Builder() 
       .scheme("https") 
       .host("example.com"); 

gefolgt von der Parameter ergänzt:

for (Map.Entry<String,String> entry: params.entrySet()) { 
      httpUrlBuilder.addQueryParameter(entry.getKey(), entry.getValue()); 
} 

und schließlich den Bau der Anfrage:

HttpUrl httpUrl = httpUrlBuilder.build(); 
Request request = new Request.Builder() 
       .url(httpUrl) 
       .get() 
       .build(); 
1
Map<String,String> params = new HashMap<>(); 
params.put("p1","a"); 
params.put("p2","b"); 
params.put("p3","c"); 

Sie verwenden können:

paramString = urlEncodeUTF8(params) 

Es wird wieder "p1 = a & p2 = b & p3 = c". Sie hängen es an die Basis Ihrer URL an.

url = "https//example.com?" + paramString 
+0

Wo ist 'urlEncodeUTF8'? – CoXier

+0

urlEncoreUTF8 ist in java.net.URLEncoder enthalten. Auch wenn Sie in Eclipse arbeiten, können Sie Strg + Shift + o eingeben, um fehlende Bibliotheken automatisch zu importieren. – L01c

2

Wenn Sie Ihren params Map iterieren möchten, können Sie auf diese Weise tun:

Map<String, String> params = ..... 
for (Map.Entry<String, String> entry : params.entrySet()) 
{ 
    httpUrl.addQueryParameter(entry.getKey(),entry.getValue()); 

} 
+0

Dies funktioniert nur, wenn Sie mit 'HttpUrl.Builder httpUrl = new HttpUrl.Builder() .scheme (" https ") .host (" beispiel.com ");' – FelixHJ

2

Siehe HttpUrl Javadoc für Beispiele.

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)); 
} 
+0

Sehr nützlich, aber ich muss gehen Andersherum _from_ params _to_ full URL – FelixHJ

+1

Mit 'OkHttpUrl.Builder' können Sie das machen. –