development

문자열을 반환하기 위해 OkHttp의 response.body.toString ()을 가져올 수 없습니다.

big-blog 2020. 12. 13. 10:11
반응형

문자열을 반환하기 위해 OkHttp의 response.body.toString ()을 가져올 수 없습니다.


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);

로그

내가 여기서 뭘 잘못하고 있는지 모르겠다. 응답 문자열은 어떻게 얻습니까?


.string()에서 응답을 인쇄하는 기능을 사용 했습니다 System.out.println(). 그러나 마침내 Log.i()당신은 .toString().

따라서 .string()응답 본문에 사용 하여 다음 과 같이 요청의 응답을 인쇄하고 받으십시오.

response.body().string();

노트:

  1. .toString(): 이것은 문자열 형식으로 개체를 반환합니다.

  2. .string(): 응답을 반환합니다.

이것이 당신의 문제를 해결한다고 생각합니다 ... 맞습니다.


누군가 내가 가진 것과 같은 이상한 일에 부딪 힐 경우를 대비해서. 디버그 모드 에서 개발하는 동안 코드를 실행 하고 분명히 OKHttp 2.4부터

.. 응답 본문은 한 번만 사용할 수있는 원샷 값입니다.

따라서 디버그 할 때 인스펙터의 "백그라운드"호출이 있으며 본문은 항상 비어 있습니다. 참조 : https://square.github.io/okhttp/3.x/okhttp/okhttp3/ResponseBody.html


response.body,.string()한 번만 사용할 수 있습니다. 아래와 같이 사용하십시오 :

String responseBodyString = response.body.string();
use the responseBodyString as needed in your application.

예를 들어 다음과 같이 변경하십시오.

protected String doInBackground(String... params) {
            try {
                JSONObject root = new JSONObject();
                JSONObject data = new JSONObject();
                data.put("type", type);
                data.put("message", message);
                data.put("title", title);
                data.put("image_url", imageUrl);
                data.put("uid",uid);
                data.put("id", id);
                data.put("message_id", messageId);
                data.put("display_name", displayName);
                root.put("data", data);
                root.put("registration_ids", new JSONArray(receipts));
                RequestBody body = RequestBody.create(JSON, root.toString());
                Request request = new Request.Builder()
                        .url(URL)
                        .post(body)
                        .addHeader("Authorization", "key=" + serverKey)
                        .build();
                Response response = mClient.newCall(request).execute();
                String result = response.body().string();
                Log.d(TAG, "Result: " + result);
                return result;
            } catch (Exception ex) {
                Log.e(TAG,"Exception -> "+ex.getMessage());
            }
            return null;
        }

참고 URL : https://stackoverflow.com/questions/28300359/cant-get-okhttps-response-body-tostring-to-return-a-string

반응형