0

更新:受信しようとするデータがどれほど少なくても、同じエラーが発生することはわかっています。これを解決するのに役立つ考えや提案は大歓迎です。

Web サービスのメンバーのリストから UserID のリストを取得しようとしています。残念ながら、少数のメンバーのみを受け取った後、「ストリームが閉じられました」という IOException が発生します。この規模のストリームを取得しようとするのはこれが初めてであり (+100 メンバーについて話している)、このエラーを受け取るのも初めてです。

問題のエラー:

IO例外

例外が発生するコード:

private void setupRequest(OAuthRequest request) 
{
    request.setConnectionKeepAlive(true);
    request.setConnectTimeout(60, TimeUnit.SECONDS);
    request.addHeader("accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*");
//  request.addHeader("accept-encoding", "gzip, deflate");
    request.addHeader("user-agent", m_sIDENTIFIER);
}

private String readStream(InputStream stream) throws IOException 
{
    String sReturn = "";
    if(stream != null)
    {
        final BufferedReader bufReader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
        final StringBuffer s2 = new StringBuffer();
        String line = bufReader.readLine();
        if(line != null)
        {
            s2.append(line);
            while((line = bufReader.readLine()) != null)
            {
                s2.append('\n');
                s2.append(line);
            }
        }
        bufReader.close();
        sReturn = s2.toString();
    }
    return sReturn;
}

private InputStream getResultStream(Response response) throws IOException
{
    InputStream resultStream = null;
    if(response != null)
    {
        String encoding = response.getHeader("Content-Encoding");
        if((encoding != null) && (encoding.equalsIgnoreCase("gzip")))
        {
            Log.d("Stream :", "Read GZIP");

        } else if ((encoding != null) && encoding.equalsIgnoreCase("deflate")) {
            resultStream = new InflaterInputStream(response.getStream(), new Inflater(true));
            Log.d("Stream :", "Read Deflated.");
        } else {
            resultStream = response.getStream();
            Log.d("Stream :","Read Normal.");
        }       
    }

    return resultStream;
}

問題の原因について何か考えはありますか? 受信できるデータ量に制限はありますか?

4

2 に答える 2

0

リモートサーバーが接続を閉じたと思います(エラーが原因ですか?)。ログから、応答がgzipで圧縮されていることがわかります。成功した応答もgzipで圧縮されましたか?

于 2012-06-25T12:47:03.303 に答える
0

接続がタイムアウトになると思います。

request.setConnectTimeout(60, TimeUnit.SECONDS);

秒数を増やす

于 2012-06-25T12:06:13.517 に答える