如何在Android中使用okhttp库向api(http post)添加参数

M.A*_*ali 35 android okhttp

在我的Android应用程序中,我使用的是okHttp库.如何使用okhttp库将参数发送到服务器(api)?目前我使用以下代码访问服务器现在需要使用okhttp库.

这是我的代码:

httpPost = new HttpPost("http://xxx.xxx.xxx.xx/user/login.json");
nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("email".trim(), emailID));
nameValuePairs.add(new BasicNameValuePair("password".trim(), passWord));
httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
String response = new DefaultHttpClient().execute(httpPost, new BasicResponseHandler());
Run Code Online (Sandbox Code Playgroud)

Bao*_* Le 48

对于OkHttp 3.x,删除了FormEncodingBuilder,改为使用FormBody.Builder

        RequestBody formBody = new FormBody.Builder()
                .add("email", "Jurassic@Park.com")
                .add("tel", "90301171XX")
                .build();

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .post(formBody)
                .build();

        Response response = client.newCall(request).execute();
        return response.body().string();
Run Code Online (Sandbox Code Playgroud)

  • 其他解决方案基于OkHttp的旧版本。这是最新的。 (2认同)

Gen*_*lov 43

    private final OkHttpClient client = new OkHttpClient();

      public void run() throws Exception {
        RequestBody formBody = new FormEncodingBuilder()
            .add("email", "Jurassic@Park.com")
            .add("tel", "90301171XX")
            .build();
        Request request = new Request.Builder()
            .url("https://en.wikipedia.org/w/index.php")
            .post(formBody)
            .build();

        Response response = client.newCall(request).execute();
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

        System.out.println(response.body().string());
      }
Run Code Online (Sandbox Code Playgroud)


mat*_*ash 7

您只需在创建RequestBody对象之前格式化POST的主体.

您可以手动执行此操作,但我建议您使用Square(OkHttp的制造商)的MimeCraft库.

在这种情况下,你需要FormEncoding.Builder上课; 设置contentType"application/x-www-form-urlencoded"并使用add(name, value)为每个键-值对.


Suf*_*ian 5

没有一个答案对我有用,所以我玩了一下,下面的一个效果很好。分享以防万一有人遇到同样的问题:

进口:

import com.squareup.okhttp.MultipartBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
Run Code Online (Sandbox Code Playgroud)

代码:

OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBuilder()
        .type(MultipartBuilder.FORM) //this is what I say in my POSTman (Chrome plugin)
        .addFormDataPart("name", "test")
        .addFormDataPart("quality", "240p")
        .build();
Request request = new Request.Builder()
        .url(myUrl)
        .post(requestBody)
        .build();
try {
    Response response = client.newCall(request).execute();
    String responseString = response.body().string();
    response.body().close();
    // do whatever you need to do with responseString
}
catch (Exception e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)