【问题标题】:OKHTTP GET and POST request return empty body messageOKHTTP GET 和 POST 请求返回空正文消息
【发布时间】:2021-08-06 09:42:45
【问题描述】:

我想在我的服务器上上传文件,我决定尝试 OKHTTP 而不是我当前基于 android 自己的 HTTP 实现和 AsyncTask 的方法。

无论如何,我使用了 OKHTTP 及其异步实现(来自它自己的配方),但它在 GET 和 POST 方法中都返回了一个空消息(请求代码正常,消息为空)。 我是不是执行错了,还是还有什么我没有考虑到的?与此同时,我找不到类似的案例,除了this 说使用了 AsyncTask。

代码如下:

Request request;
Response response;
private final OkHttpClient client = new OkHttpClient();
private static final String postman_url = "https://postman-echo.com/get?foo1=bar1&foo2=bar2";
String message_body;

public void Get_Synchronous() throws IOException
{
    request = new Request.Builder()
            .url(postman_url)
            .build();

    Call call = client.newCall(request);
    response = call.execute();

    message_body = response.toString();
    //assertThat(response.code(), equalTo(200));
}

public void Get_Asynchronous()
{
    request = new Request.Builder()
            .url(postman_url)
            .build();

    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        public void onResponse(Call call, Response response)
                throws IOException
        {
            message_body = response.toString();
            
        }

        public void onFailure(Call call, IOException e)
        {
            
        }
    });
}

编辑: 我收到了登录响应:

onResponse: 响应{protocol=h2, code=200, message=, url=https://postman-echo.com/get?foo1=bar1&foo2=bar2}

【问题讨论】:

  • 能否请您添加日志响应?另外,你能记录下失败的 iOException 吗?这将有助于更好地理解错误。预期的反应是什么?很多时候文件上传 apis 只是返回 200 来确认文件已上传,没有别的。
  • 谢谢,@MohitAjwani 我已经添加了日志
  • 所以这个 API 返回的是空消息。虽然是成功。所以,这是标准的 API 行为。
  • 亲爱的@MohitAjwani 它应该返回如下内容:" {"args":{"foo1":"bar1","foo2":"bar2"},"headers":{"x- forwarded-proto":"https","x- ..."
  • 尝试添加转换器工厂 - futurestud.io/tutorials/… 这应该有助于将响应转换为对象,以便您可以打印它。

标签: java android post get okhttp


【解决方案1】:

好的,对于任何想从呼叫中接收字符串的人,responseresponse.messgage() 不提供。要从您的提供者那里获取响应,您只需要在 onResponse 中调用 response.body().string(),它会在您的请求中返回消息。

但毕竟,如果您想使用以下方式接收 JSON 文件,Retrofit 是一个更好的选择 .addConverterFactory(GsonConverterFactory.create(gson)).

如果您仍想接收字符串,请使用 .addConverterFactory(ScalarsConverterFactory.create()),如 here 所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2015-01-05
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多