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();
注:
.toString()
:これは、オブジェクトを文字列形式で返します。
.string()
:これは応答を返します。
これで問題が解決すると思います...そうです。
誰かが私と同じ奇妙なことにぶつかった場合に備えて。開発中にデバッグモードでコードを実行し、明らかにOKHttp 2.4以降
..応答本文は1回限りの値であり、1回のみ使用できます
したがって、デバッグ時には、インスペクターから「舞台裏」の呼び出しがあり、ボディは常に空です。参照: https://square.github.io/okhttp/3.x/okhttp/okhttp3/ResponseBody.html
response.body,.string()
は1回のみ使用できます。以下として使用してください:
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;
}