squareup example android okhttp3

android - squareup - okhttp3 kotlin example



¿Cómo enviar parámetros de publicación dinámicamente(o en bucle) en OKHTTP 3.x en Android? (4)

Aquí está mi versión

/** * <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(); }

Estoy utilizando la versión OKHTTP 3.x. Quiero publicar varios parámetros y me gustaría agregar los parámetros en un bucle. Sé que en la versión 2.x, puedo usar FormEncodingBuilder y agregarle parámetros en bucle y luego crear un cuerpo de solicitud. Pero en 3.x, la clase ha sido eliminada.

Aquí está mi código actual :

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

Ahora quiero agregar 5 parámetros, pero en un bucle, es decir, crear un cuerpo de solicitud creando un cuerpo en un bucle. Como escribí anteriormente, sé cómo hacerlo en la versión 2.x de OKHTTP pero estoy usando la versión 3.x.

Cualquier ayuda u orientación es apreciada.

Gracias por adelantado


Así es como lo hago:

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


Importaciones

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

Código:

// 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();


No estoy seguro, pero puedes intentar algo así:

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

El resto de tu código parece bueno. Espero que funcione :)!