Search code examples
androidmultipartokhttp

Using multipart with for loop


I am using OKHTTP and using Multipart to send image to server. My code is as follows :

RequestBody requestBody = null;
for (int i = 0; i < noOfItems; i++) {
                requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
                        .addFormDataPart("func", "savepacket")
                        .addFormDataPart("userid", String.valueOf(mLoginPref.getInt("userId", 1)))
                        .addFormDataPart("packname", strPackname)
                        .addFormDataPart("image", str + ".png", RequestBody.create(MediaType.parse("image/png"), imagePath))
                        .addFormDataPart("count", String.valueOf(noOfItems))
                        .addFormDataPart("item_name" + String.valueOf(i + 1), al.get(i).getStrItemName())
                        .addFormDataPart("tag_item" + String.valueOf(i + 1), al.get(i).getStrItemTag())
                        .addFormDataPart("note" + String.valueOf(i + 1), al.get(i).getStrComment())
                        .addFormDataPart("image" + String.valueOf(i + 1), al.get(i).getStrItemName() + ".png", RequestBody.create(MediaType.parse("image/png"), al.get(i).getStrItemImage()))
                        .build();
            }
            mstrQRResponse = HttpUtils.postRun("pack", requestBody);

As From code,(al is ArrayList) You can see that I have to send multiple items with single Packname, thats why I am using for loop.

But, actually only last item is saved on Server due to requestBody gets overrides inside for loop.

How all the items will be send by adding it to requestbody ?


Solution

  • Try this may it will help you.

    MultipartBuilder multipartBuilder = new MultipartBuilder().type(MultipartBuilder.FORM);
        RequestBody requestBody = null;
        for (int i = 0; i < noOfItems; i++) {
            multipartBuilder
                    .addFormDataPart("func", "savepacket")
                    .addFormDataPart("userid", String.valueOf(mLoginPref.getInt("userId", 1)))
                    .addFormDataPart("packname", strPackname)
                    .addFormDataPart("image", str + ".png", RequestBody.create(MediaType.parse("image/png"), imagePath))
                    .addFormDataPart("count", String.valueOf(noOfItems))
                    .addFormDataPart("item_name" + String.valueOf(i + 1), al.get(i).getStrItemName())
                    .addFormDataPart("tag_item" + String.valueOf(i + 1), al.get(i).getStrItemTag())
                    .addFormDataPart("note" + String.valueOf(i + 1), al.get(i).getStrComment())
                    .addFormDataPart("image" + String.valueOf(i + 1), al.get(i).getStrItemName() + ".png", RequestBody.create(MediaType.parse("image/png"), al.get(i).getStrItemImage()));
        }
        requestBody = multipartBuilder.build();
        mstrQRResponse = HttpUtils.postRun("pack", requestBody);