I'm building an app that requires an API call that has array in its POST body request. I'm using OkHttp 2.6 to request for API.
The request in Postman looks like this:

I have tried several ways of writing RequestBody in order to achieve this,
First method
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("app_token", MY_TOKEN)
.addFormDataPart("user_id", 377)
.addFormDataPart("group_id", String.valueOf(groupId))
.addFormDataPart("key_id", deals.toString())
.addFormDataPart("img", filename + ".jpg", fileBody)
.build();
Second method
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("app_token", MY_TOKEN)
.addFormDataPart("user_id", 377)
.addFormDataPart("group_id", String.valueOf(groupId))
.addFormDataPart("key_id[0]", "33")
.addFormDataPart("key_id[1]", "34")
.addFormDataPart("img[0]", filename + ".jpg", fileBody)
.build();
Third method, which I found here.
MediaType json = MediaType.parse("application/json; charset=utf-8");
Map<String, Integer> params = new HashMap<>();
for (int i = 0; i < deals.size(); i++) {
params.put("key_id["+i+"]", Integer.valueOf(deals.get(i).getUid()));
}
JSONObject parameter = new JSONObject(params);
RequestBody theBody = RequestBody.create(json, parameter.toString());
RequestBody requestBodyyy = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("app_token", MY_TOKEN)
.addFormDataPart("user_id", 377)
.addFormDataPart("group_id", String.valueOf(groupId))
.addPart(theBody)
.addFormDataPart("img[0]", filename + ".jpg", fileBody)
.build();
But, none of them are working.
What is the correct way of doing this? I also need the array size to be dynamic as I'm not passing a static one.
Heh, the solution seems easy. I've managed to solve this issue, so I'm gonna write here anyway for anyone seeking the same solution.
MultipartBuilder multipartBuilder = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("token", MY_TOKEN)
.addFormDataPart("user_id", user_id)
.addFormDataPart("group_id", group_id)
// .addFormDataPart("img[0]", filename + ".jpg", RequestBody.create(MediaType.parse("image/png"), file));
for (int i = 0; i < keys.size(); i++) {
multipartBuilder.addFormDataPart("key_id[" + i + "]", keys.get(i));
}
for (int i = 0; i < files.size(); i++) {
filename = Utils.getSimpleTimestamp();
multipartBuilder.addFormDataPart("img[" + i + "]", filename + ".jpg", RequestBody.create(MediaType.parse("image/png"), files.get(i)));
}
RequestBody requestBody = multipartBuilder.build();
Request request = new Request.Builder()
.url(API_URL)
.post(requestBody)
.addHeader("content-type", "multipart/form-data;")
.build();
OkHttpClient okHttpClient = new OkHttpClient();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With