2016-01-16 13 views
12

Tamamen OKHTTP 3.x sürümünü kullanıyorum. Birden çok parametre göndermek istiyorum ve param bir döngüye eklemek istiyorum. 2.x sürümünde, FormEncodingBuilder'ı kullanabilir ve döngüye param ekleyebilir ve sonra da bir istek gövdesi oluşturabilirim. Ancak 3.x'te, sınıf kaldırıldı. Android'de OKHTTP 3.x'te dinamik olarak (veya döngü içinde) post parametrelerini nasıl gönderirim?

RequestBody formBody = new FormBody.Builder() 
      .add("Param1", value1) 
      .add("Param2", value2) 
      .build(); 
Request request = new Request.Builder() 
      .url("url") 
      .post(formBody) 
      .build(); 

Şimdi 5 params eklemek istiyorum ama bir döngü yani bir döngü içinde formbody inşa ederek istek gövdesini oluşturmak:

İşte benim şimdiki kodudur. Yukarıda yazdığım gibi, OKHTTP sürüm 2.x'te nasıl yapılacağını biliyorum ama 3.x sürümünü kullanıyorum.

Herhangi bir yardım veya kılavuz takdir edilir.

Teşekkür peşin

+0

Ben bunu hiç yapmadım ama ilk kez 5 Params içeren JsonObject'i yapabilir ve bu formda bir JsonObject geçirebilirsin. – VVB

cevap

21

var var ben bunu nasıl:

FormBody.Builder formBuilder = new FormBody.Builder() 
     .add("key", "123"); 

// dynamically add more parameter like this: 
formBuilder.add("phone", "000000"); 

RequestBody formBody = formBuilder.build(); 

Request request = new Request.Builder() 
       .url("https://aaa.com") 
       .post(formBody) 
       .build(); 
0

içinde emin değilim ama böyle bir şey deneyebilirsiniz: kodunuzun

RequestBody formBody = new FormBody.Builder(); 
for(...;...;...) { 
    formBody.add(...) 
} 
formBody.build(); 

kalanı iyi görünüyor. Umarım işe yarar :)

+0

Daha önce denenmedi. FormBody.Builder bir RequestBody döndürmez. Uyumsuz türler. :( –

11

İthalat

import okhttp3.OkHttpClient; 
import okhttp3.FormBody; 
import okhttp3.Request; 
import okhttp3.RequestBody; 

Kodu:

// HashMap with Params 
HashMap<String, String> params = new HashMap<>(); 
params.put("Param1", "A"); 
params.put("Param2", "B"); 

// Initialize Builder (not RequestBody) 
FormBody.Builder builder = new FormBody.Builder(); 

// Add Params to Builder 
for (Map.Entry<String, String> entry : params.entrySet()) { 
    builder.add(entry.getKey(), entry.getValue()); 
} 

// Create RequestBody 
RequestBody formBody = builder.build(); 

// Create Request (same) 
Request request = new Request.Builder() 
     .url("url") 
     .post(formBody) 
     .build(); 
1

İşte İşte benim sürüm

/** 
* <strong>Uses:</strong><br/> 
* <p> 
* {@code 
* List<Pair<String, String>> pairs = new ArrayList<>();} 
* <br/> 
* {@code pairs.add(new Pair<>("key1", "value1"));}<br/> 
* {@code pairs.add(new Pair<>("key2", "value2"));}<br/> 
* {@code pairs.add(new Pair<>("key3", "value3"));}<br/> 
* <br/> 
* {@code postToServer("http://www.example.com/", pairs);}<br/> 
* </p> 
* 
* @param url 
* @param pairs List of support.V4 Pair 
* @return response from server in String format 
* @throws Exception 
*/ 
public String postToServer(String url, List<Pair<String, String>> pairs) throws Exception { 
    okhttp3.OkHttpClient client = new okhttp3.OkHttpClient(); 
    okhttp3.Request.Builder builder = new okhttp3.Request.Builder().url(url); 

    if (pairs != null) { 
     okhttp3.FormBody.Builder postData = new okhttp3.FormBody.Builder(); 
     for (Pair<String, String> pair : pairs) { 
      postData.add(pair.first, pair.second); 
     } 
     builder.post(postData.build()); 
    } 
    okhttp3.Request request = builder.build(); 
    okhttp3.Response response = client.newCall(request).execute(); 
    if (!response.isSuccessful()) { 
     throw new IOException(response.message() + " " + response.toString()); 
    } 
    return response.body().string(); 
} 
İlgili konular