私はウェブサイト用のアンドロイドアプリに取り組んでいます。ウェブサイトはNginx上のRuby on Railでできており、HTTP-REST APIを提供し、JSON形式で応答します。非常に奇妙なことは、このHTTP応答ヘッダーで何かを出力し、Androidがそれを読み取れないことです:
Cache-Control private
Connection keep-alive
Content-Disposition inline
Content-Length 6608
Etag "5c6304b4d6f23fab9b841ec3567b32c8"
Server nginx/1.2.2 + Phusion Passenger 3.0.15 (mod_rails/mod_rack)
Status 304
Vary User-Agent, Accept-Encoding
X-Powered-By Phusion Passenger (mod_rails/mod_rack) 3.0.15
X-Runtime 16
content-transfer-encoding binary
私はこの関数を使用して JSON を取得します - content-transfer-encoding バイナリを使用せずに他の API でうまく機能しますが、そのようなデータを読み取ると、何も読み取れません。Androidでのバイナリの扱い方や、なぜサイトがバイナリ形式で出力するのか知りたいのですが、Ruby on Railで対処できる方法はありますか?ありがとう。
public String getJSON(String url) {
try {
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = HTTP_TIMEOUT_CONNECTION;
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
int timeoutSocket = HTTP_TIMEOUT_SOCKET;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Accept-Encoding","deflate");
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, Charset.defaultCharset()), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
android.util.Log.v ("JSONParser", sb.toString());
is.close();
json = sb.toString();
return json;
} catch (Exception e) {
e.printStackTrace();
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
json = null;
return null;
}
それは私にこのエラーを与えます -
08-06 15:29:46.218: W/System.err(4318): org.json.JSONException: End of input at character 1 of
08-06 15:29:46.218: W/System.err(4318): at org.json.JSONTokener.syntaxError(JSONTokener.java:446)
08-06 15:29:46.218: W/System.err(4318): at org.json.JSONTokener.nextValue(JSONTokener.java:93)
08-06 15:29:46.238: W/System.err(4318): at org.json.JSONArray.<init>(JSONArray.java:87)
08-06 15:29:46.238: W/System.err(4318): at org.json.JSONArray.<init>(JSONArray.java:103)
08-06 15:29:46.238: W/System.err(4318): at com.baozoumanhua.android.network.JSONParser.parseJSONArray(JSONParser.java:181)
08-06 15:29:46.238: W/System.err(4318): at com.baozoumanhua.android.network.Comments.getJSONArray(Comments.java:176)
08-06 15:29:46.238: W/System.err(4318): at com.baozoumanhua.android.network.Comments$1.run(Comments.java:151)
08-06 15:29:46.238: W/System.err(4318): at java.lang.Thread.run(Thread.java:1019)