OKHTTP 3 MediaType 作为“application/x-www-form-urlencoded”崩溃问题

App*_*ro2 2 crash android okhttp3

我试图为 android 应用程序实现邮递员的工作如下: 在此处输入图片说明

这是我的Java代码:

    MediaType CONTENT_TYPE = MediaType.parse("application/x-www-form-urlencoded");
    RequestBody requestBody = new MultipartBody.Builder()
            .setType(CONTENT_TYPE)
            .addFormDataPart("phoneNumber", phone)
            .addFormDataPart("serviceType", type)
            .addFormDataPart("stripeToken", token)
            .addFormDataPart("serviceCost", String.valueOf(amount))
            .build();

    final Request request = new Request.Builder()
            .url(Const.URL_HEROKU_BASE+"payment/charge")
            .post(requestBody)
            .build();
Run Code Online (Sandbox Code Playgroud)

它使崩溃... 在此处输入图片说明

Mon*_*ain 11

我在使用这个免费休息服务的公共 api/login 时遇到了同样的问题。

postman 中,当将 body 作为application/x-www-form-urlencoded传递时。但是在 OkHttp3 MultipartBody 中不起作用。

正如@shindi 建议的那样,这段代码非常适合这个 api。

RequestBody requestBody = new FormBody.Builder()
            .add("email", "some_email")
            .add("password", "some_password")
            .build();
Run Code Online (Sandbox Code Playgroud)

请求也不需要 .header() 。为我工作。希望能帮助到你。


小智 5

更改:多部分主体

至:表单主体


Non*_*hoi 1

我认为您没有正确添加内容类型:

改变这个:

final Request request = new Request.Builder()
                .url(Const.URL_HEROKU_BASE+"payment/charge")
                .post(requestBody)
                .build();
Run Code Online (Sandbox Code Playgroud)

到:

final Request request = new Request.Builder()
                .header("Content-Type", "application/x-www-form-urlencoded")
                .url(Const.URL_HEROKU_BASE+"payment/charge")
                .post(requestBody)
                .build();
Run Code Online (Sandbox Code Playgroud)

并移除该.setType(CONTENT_TYPE)零件。