2012-01-11 180 views
2

我熟悉的Android HttpURLConnection類和Apache的HttpConnection類和他們的工作方式(他們都是同步的,但我可以忍受)。HTTP響應異步大型響應

我有數據來自服務器的正在添加許多行大的響應。這是一個JSON響應,我可以在分析所有響應之前部分顯示數據。一些json解析器允許(如xcers允許xml)。上面提到的兩個類的回調和方法是否允許?當我打開輸入流並讀取HTTPURLConnection的響應時,是否打開數據流ALL數據已經存在?或者我可以打開並閱讀它以及更多應該遵循的內容嗎?

此外,有沒有與NIO適用於Android任何HTTP方法?

回答

2

隨着HttpClient的,當你打開響應流是這樣的:

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

,並開始閱讀,你真正開始下載,你只要這些收到獲得新的字節。你不必等待所有下載的東西開始閱讀。

據我知道,捆綁Android是不是基於NIO HttpClient的。我不知道有這樣做的替代方案。

+0

正如我在我的問題說,我知道上面的代碼,如果你說InputStream的更新比這就是我的回答然而,讓我們說這需要一點時間(慢的服務器),我達到了我流的末尾,沒有新的數據但到達,所以我的stream.avialable或stream.read()將分別返回0和-1,我怎麼知道什麼時候新數據是avialabe(這就是爲什麼我問了NIO)。 – codeScriber 2012-01-11 16:19:48

+0

沒有更好的反應,所以我會接受你的答案,儘管它只是部分。無論如何,10倍。 – codeScriber 2012-01-13 21:22:23

0

除了所有在Ladlestein的評論可能的解決方案,還有包裝全部在AsyncTask的簡單的答案。這裏是a sample project演示HTTP request使用HttpClientAsyncTask

+0

麥克aync一部分,我在媒體鏈接我的問題是不是真正的問題,我不使用的AsyncTask但aService用我自己的連接隊列中說,有幾個線程,每個(如果可用)將能夠運行一個可運行和調用回調或意圖,或將完成播放(錯誤或確定的響應),所以你的答案並不真的爲我添加新的信息。 – codeScriber 2012-01-11 16:21:40