0

私はウェブサイト用のアンドロイドアプリに取り組んでいます。ウェブサイトは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)
4

1 に答える 1

0

問題は解決しました。httpPostの代わりにhttpGetを使用してください...

于 2012-08-06T20:00:07.400 に答える