无法获取 OkHttp 的 response.body.toString() 来返回字符串

2022-08-31 10:15:45

我试图使用OkHttp获取一些json数据,并且无法弄清楚为什么当我尝试记录我得到的是response.body().toString()Results:﹕ com.squareup.okhttp.Call$RealResponseBody@41c16aa8

try {
        URL url = new URL(BaseUrl);
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .header(/****/)
                .build();

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

        **//for some reason this successfully prints out the response**
        System.out.println("YEAH: " + response.body().string());

        if(!response.isSuccessful()) {
            Log.i("Response code", " " + response.code());
        }

        Log.i("Response code", response.code() + " ");
        String results = response.body().toString();

        Log.i("OkHTTP Results: ", results);

Log

我不知道我在这里做错了什么。如何获取响应字符串?


答案 1

您可以使用函数在 中打印响应。但最终你正在使用..string()System.out.println()Log.i().toString()

因此,请在响应正文中使用来打印并获取请求的响应,例如:.string()

response.body().string();

注意:

  1. .toString():这将以字符串格式返回对象。

  2. .string():这将返回您的响应。

我认为这可以解决您的问题...右。


答案 2

以防有人碰到和我一样的怪事。我在调试模式下开发期间运行代码,显然是从OKHttp 2.4开始的

..响应正文是一次性值,只能使用一次

因此,在调试中,检查器会发出“幕后”呼叫,并且主体始终是空的。请参见: https://square.github.io/okhttp/3.x/okhttp/okhttp3/ResponseBody.html


推荐