访问 OKHttp 响应主体

Accessing OKHttp Response Body

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

这是给我带来问题的地方。所以我的第一个请求是给我一个令牌,然后我需要在我的第二个请求中使用存储在 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());

            }
        });
    }

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

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

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

更多信息

如果你想避免空结果:

assert response.body() != null;
String r = response.body().string();

如果您想访问每个元素:

JSONObject json = new JSONObject(r);
Log.i("love", "Res: "+json.getString("result")); //Name -> Answer

查看结果:

{"fname":"John","sname":"Alice","percentage":"46","result":"Can choose someone better."} // String from 
I/love: Res: All the best! // Json form by Name