gpt4 book ai didi

android - 使用 Okhttp 在多部分 POST 中传递数组

转载 作者:行者123 更新时间:2023-11-29 17:16:17 27 4
gpt4 key购买 nike

我正在构建一个需要 API 调用的应用程序,该 API 调用在其 POST 正文请求中包含数组。我正在使用 OkHttp 2.6 来请求 API。

Postman 中的请求如下所示:

postman-ss

为了实现这一点,我尝试了几种编写 RequestBody 的方法,

  1. 第一种方法

    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();
  2. 第二种方法

    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();
  3. 我找到的第三种方法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();

但是,它们都不起作用。

正确的做法是什么?我还需要数组大小是动态的,因为我没有传递静态数组。

最佳答案

嘿,解决方案似乎很简单。我已经设法解决了这个问题,所以无论如何我都会在这里写信给任何寻求相同解决方案的人。

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

关于android - 使用 Okhttp 在多部分 POST 中传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38718439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com