1

Android アプリケーションで、httpclient と httpget を使用して Web サイトを取得しようとしています。エミュレーターと私の HTC Desire HD で問題なく動作しています。しかし、wifi から切断して 3G ネットワークで Web ページを取得しようとすると、応答が不完全になることがあります。次のコードを使用して Web ページを取得しています。

public String htmlBody (String strURI)
{
String strBody = "";
HttpClient httpclient = new DefaultHttpClient();
//HttpProtocolParams.setUseExpectContinue(httpclient.getParams(), false);
try {
        HttpGet httpget = new HttpGet(strURI);
        HttpResponse response = httpclient.execute(httpget, localContext);

        HttpEntity entity = response.getEntity();

        strBody = Functions.convertStreamToString(entity.getContent());
    }
} finally {
    httpclient.getConnectionManager().shutdown();
}

return strBody;
}

応答が完全であることを確認する方法はありますか? または、応答が不完全なときに httpget を再開しますか?

4

2 に答える 2

1

最近、あなたと同じ問題に遭遇しました。いくつかの実験の後、私は答えを見つけたと思います。Androidは、3Gネットワ​​ークで1回のInputStream#read()呼び出しで完全な応答を読み取れません。次のコードが機能する可能性があります。

InputStream in = entity.getContent();
int length = 0;
while (true) {
    int ret = in.read(buffer, length, buffer.length - length);
    if (ret == -1) break;
    length += ret;
}
于 2012-07-22T08:09:09.757 に答える
0

ちょっと考えてみてください: Web サイトの応答の最後に特殊文字を配置し、その文字が存在するかどうかを確認してください。そこにある場合は、完全な応答を受け取ったことがわかります。そうでない場合は、リクエストまたは何かを再送信してください。

于 2011-03-31T19:53:22.320 に答える