2016-01-16 21 views
12

私はOKHTTP 3.xバージョンを使用しています。私は複数のパラメータを投稿したい、ループ内のパラメータを追加したいと思います。 バージョン2.xでは、FormEncodingBuilderを使用してループでparamsを追加してから、リクエスト本体を作成することができます。 3.xでは、クラスが削除されました。ここでアンドロイドのOKHTTP 3.xでポストパラメータを動的に(またはループで)送信する方法は?

は私の現在のコードです:

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

今私は5つのparamsを追加したいが、ループすなわちループでformbodyを構築することにより、リクエストボディを作成します。 上記のように、私はOKHTTPバージョン2.xでそれを行う方法を知っていますが、私はバージョン3.xを使用しています。

ご迷惑をおかけして申し訳ございません。

おかげでアドバンス

+0

私はこれを実践していませんが、最初に5つのParamsを含むJsonObjectを作成し、その1つのJsonObjectをformBodyに渡してformBodyがObjectを受け入れるようにします。 – VVB

答えて

21

は、ここで私はそれを行う方法は次のとおりです。

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

に私はわからないが、あなたはそのような何かを試すことができます:あなたのコードの

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

残りは良いようです。 それはうまくいくと思う:)!

+0

それは動作しません、すでに試してみました。 FormBody.BuilderはRequestBodyを返しません。 互換性のない型です。 :( –

11

輸入

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

コード:

// 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

ここに私のバージョンは

/** 
* <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(); 
} 
関連する問題