如何在Android中的OKHTTP 3.x中动态(或循环)发送post参数?

int*_*iot 20 android okhttp3

我正在使用OKHTTP 3.x版本.我想发布多个参数,并希望在循环中添加参数.我知道在2.x版本中,我可以使用FormEncodingBuilder并在循环中添加params,然后从中创建一个请求体.但在3.x中,该类已被删除.

这是我目前的代码:

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

现在我想添加5个参数但是在一个循环中,即通过在循环中构建formbody来创建请求体.就像我上面写的那样,我知道如何在OKHTTP版本2.x中执行它,但我使用的是版本3.x.

任何帮助或指导表示赞赏.

提前致谢

fah*_*zmi 29

我是这样做的:

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();
Run Code Online (Sandbox Code Playgroud)


Nic*_*k B 15

进口

import okhttp3.OkHttpClient;
import okhttp3.FormBody;
import okhttp3.Request;
import okhttp3.RequestBody;
Run Code Online (Sandbox Code Playgroud)

码:

// 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();
Run Code Online (Sandbox Code Playgroud)