Android 通過httpclient 呼叫碰到的問題總結
問題一:
1. java.lang.IllegalStateExceptio n: Content has been consumed
這個問題是多次呼叫httpEntity.getContent()導致的, entity中的內容只能讀取一次, 參考如下:
You can retrieve the content from the entity only once. If you have
already extracted the content somewhere, and you try to fetch it
again, it will throw this IllegalStateException. Check you code and
make sure that you make this call only once.
2. http header 中的content-length
這個問題導致了各種千奇百怪的error,反正就無法返回資料。
比如; source not found, Runtime Exception等等問題,其實問題出現在測試伺服器上的Nignx的返回頭部沒有包含Firebug這項資訊,所用通過程式碼
int length = ( int ) httpEntity.getContentLength(); 獲得的是 -1, 而後所有通過length設定的長度都自然出錯哦。
可以參考詳細說明: http://stackoverflow.com/questions/7049937/Android-app-failed-to-get-content-at-80-port-with-httpclient/7050034#7050034
與此相關的,可以瞭解一下, http chunked 編碼。
可以用 Firebug or httpwatch
程式碼類似:
String url3000 = "http://192.168.1.103:3000/posts.xml";
String url = "http://192.168.1.103/posts.xml";
Log.d( "posts", "performing get " + url);
HttpGet httpGet=new HttpGet(url);
HttpResponse responsep=httpClient.execute(httpGet);
System.out.println(responsep.getStatusLine());
HttpEntity httpEntity = responsep.getEntity();
int length = ( int ) httpEntity.getContentLength();
System.out.println("The content length is: "+length);
Log.d( "posts", "The content length is: " + length );
StringBuffer sb = new StringBuffer( length );
InputStreamReader isr = new InputStreamReader( httpEntity.getContent(), "UTF-8" );
char buff[] = new char[length];
int cnt;
while ( ( cnt = isr.read( buff, 0, length - 1 ) ) > 0 )
{
sb.append( buff, 0, cnt );
System.out.println("The content is: "+sb.toString());
}
System.out.println("The content is: \n"+sb.toString());
Log.d( "posts", "The content is: " + sb.toString() );
isr.close();
相關文章
- iOS 彈幕開發過程碰到的問題總結iOS
- 碰到一個棘手的問題——關於httpclient。HTTPclient
- Android編譯通過,執行編譯錯誤問題總結Android編譯
- html 通過 native.js 呼叫原生 android API 程式碼段總結HTMLJSAndroidAPI
- 通過impdp做資料庫遷移遇到的問題總結資料庫
- android textview問題總結AndroidTextView
- Cacti監控MySQL實現過程中碰到的問題解彙總MySql
- webpack碰到的問題Web
- shell指令碼呼叫java jar包 的問題總結指令碼JavaJAR
- Hodoop碰到的問題628OdooOOP
- 一次DG搭建過程中碰到的問題
- 使用HttpClient過程中常見的一些問題HTTPclient
- 優雅通過HttpClientFactory使用HttpClientHTTPclient
- Android 日常開發問題總結Android
- Android中使用WebView遇到的問題總結:AndroidWebView
- shark建庫碰到的問題
- vpd碰到的問題解決
- 受HttpClient困繞的問題HTTPclient
- Android Flutter混合開發問題總結AndroidFlutter
- Android學習: 疑難問題總結Android
- Android Fragment onAttach未被呼叫的問題AndroidFragment
- 轉載: 總結:oracle穿過防火牆的問題Oracle防火牆
- 問題總結
- iOS 越獄後碰到的問題iOS
- create adapative server碰到的問題Server
- Xcode-通過ApplicationLoader上傳Api問題總結(持續更新)XCodeAPPAPI
- Android Flutter混合開發問題總結(二)AndroidFlutter
- android單元測試遇到問題總結Android
- Android 場景問題總結。(部分轉載)Android
- npm install 使用過程出現的問題總結NPM
- mysql多次呼叫儲存過程的問題MySql儲存過程
- Java呼叫Oracle儲存過程的問題JavaOracle儲存過程
- Mongodb總結5-通過裝飾模式,用Mongodb解決Hbase的不穩定問題MongoDB模式
- LNMP的403問題總結LNMP
- 近期回答的問題總結
- Android總結之鏈式呼叫(方法鏈)Android
- android 面試題總結Android面試題
- 搭建dataguard碰到的幾個小問題