访问OKHttp响应正文

时间:2016-08-22 05:33:00

标签: android get okhttp okhttp3

所以我需要弄清楚如何访问我在第二次响应中获得的值。我认为我可以将它存储到一个变量并在另一个请求中访问它。但是,情况似乎并非如此。

这是给我问题的一点。所以我的第一个请求是给我一个令牌,然后我需要使用第二个请求中存储在commatoken中的令牌。

private final OkHttpClient client = new OkHttpClient();

    public void run() throws Exception {
        Request request = new Request.Builder()
                .url(API_URL + authPreferences.getToken())
                .build();

        client.newCall(request).enqueue(new Callback() {
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }


            public void onResponse(Call call, Response response) throws IOException {
                if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

                Headers responseHeaders = response.headers();
                for (int i = 0, size = responseHeaders.size(); i < size; i++) {
                    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
                }

                System.out.println(response.body().string());
                String commatoken = response.body().string();
            }
        });

        Request dataRequest = new Request.Builder()
                .header("Authorization", "jwt"+commatoken)
                .url(ChffrMe_URL).build();

        client.newCall(dataRequest).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

                Headers responseHeaders = response.headers();
                for (int i = 0, size = responseHeaders.size(); i < size; i++) {
                    System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
                }

                System.out.println(response.body().string());

            }
        });
    }

1 个答案:

答案 0 :(得分:2)

我认为我们只能调用response.body().string()一次....所以首先将数据保存到字符串变量中......然后在需要的地方访问它。

String response_data;
..............
response_data = response.body().string();

您正在调用 response.body()。string()两次......

更多信息 https://stackoverflow.com/a/27922818/3552066