How to send post parameters dynamically (or in loop) in OKHTTP 3.x in android?
Here's how I do it:
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();
Imports
import okhttp3.OkHttpClient;import okhttp3.FormBody;import okhttp3.Request;import okhttp3.RequestBody;
Code:
// HashMap with ParamsHashMap<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 Builderfor ( Map.Entry<String, String> entry : params.entrySet() ) { builder.add( entry.getKey(), entry.getValue() );}// Create RequestBodyRequestBody formBody = builder.build();// Create Request (same)Request request = new Request.Builder() .url( "url" ) .post( formBody ) .build();
Here's my version
/** * <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();}