2012-01-11 14 views
2

私はandroid HTTPURLConnectionとapache HTTPConnectionクラスに精通しています。これらのクラスは動作しています(これらはすべて同期ですが、それでも有効です)。大きなレスポンスのためのHTTP非同期応答

私は、サーバーから送られてくる多くのデータ行に大きな応答があります。これはJSONレスポンスで、すべてのレスポンスを解析する前に部分的にデータを表示できます。いくつかのjsonパーサはそれを可能にします(xcersはxmlを許します)。上記の2つのクラスに関連するコールバックとメソッドは、それを許可していますか?入力ストリームを開くとHTTPURLConnectionからの応答を取得して読み込むときに、ALLのデータが既に存在するときにストリームを開きますか?または、それを開いて読むことができますか?

また、NIOで動作するアンドロイドにはhttpメソッドがありますか?

答えて

2

、あなたがこのような応答ストリーム開く:

HttpGet request = new HttpGet(); 
request.setURI(new URI(url)); 
HttpResponse response = client.execute(request); 
HttpEntity entity = response.getEntity(); 
InputStream stream = entity.getContent(); 

と起動読書を、あなたは実際にダウンロードを開始して、あなたはすぐにこれらが受信される新しいバイトを取得します。あなたは、すべてがダウンロードを開始して読書を開始するのを待つことはありません。

私が知る限り、AndroidにバンドルされているHttpClientはNIOに基づいていません。私はそのような代替案を知らない。

+0

私は私の質問で述べたように上記のコードを知っていますが、InputStreamがそれよりも更新されていると言えば、私の答えは少し遅い(遅いサーバー)、ストリームの最後に到達しました。まだ到着していないので、私のstream.avialableまたはstream.read()は0と-1をそれぞれ返します。どうすれば新しいデータがavialabeであるかを知ることができます。 – codeScriber

+0

レスポンスが到着していないので、私はあなたの答えを受け入れますが、それは部分的なものです。とにかく10倍。 – codeScriber

0

Ladlesteinのコメントの可能なすべての解決策に加えて、AsyncTaskにそのすべてをラップする簡単な答えがあります。ここにa sample projectHTTP requestを示し、AsyncTaskではHttpClientを使用しています。 HttpClientをして

+0

私はすでに私の質問では本当の問題ではないと言いました。私はAsyncTaskを使用しませんが、aServiceは複数のスレッドを持つ独自の接続キューを持っています。コールバックまたはインテントを呼び出すか、完了したらブロードキャストします(エラーまたはok応答)ので、実際には私の新しい情報は追加されません。 – codeScriber

関連する問題