httpclient 釋放連接的問題 Invalid use of SingleClientConnManager: connection still allocated


Invalid use of SingleClientConnManager: connection still allocated


httpPost.releaseConnection();  該代碼只會復用連接,並不會關閉當前連接,其實下面的方法 client.getConnectionManager().closeIdleConnections(0, TimeUnit.MICROSECONDS); 在某些時候也沒關閉,感覺和 httpPost.releaseConnection();  只是起到同樣復用的結果,兩個都寫更加保障(在某些版本中兩個方法只會有其中一個)

httpclient 4種關閉連接  參考這里面的4種方法  (個人未試過) 第三種方法貌似可以 

在android4.2中   client.getConnectionManager().closeIdleConnections(0, TimeUnit.MICROSECONDS);

在httpclient 4.2 種    client.getConnectionManager().closeIdleConnections(0, TimeUnit.MICROSECONDS);

經測試 ,上面兩種調用也無用

client.getConnectionManager().closeIdleConnections(0, TimeUnit.MICROSECONDS); 
在上面加上
httpGet.abort();  
就再也沒有出現該錯了


代碼

   
   
   
           
  1. String result = null;
  2. HttpPost httpPost = new HttpPost(serverUrl);
  3. try {
  4. StringEntity e = new StringEntity(bodyStr,"UTF-8");
  5. httpPost.setEntity(e);
  6. httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
  7. HttpResponse response = this.client.execute(httpPost);
  8. if(response.getStatusLine().getStatusCode() == 200) {
  9. result = EntityUtils.toString(response.getEntity(), "utf-8");
  10. }
  11. } catch (Exception var10) {
  12. LogL.e(var10.getMessage());
  13. result = null;
  14. }finally {
  15. httpPost.abort(); //終止
  16. client.getConnectionManager().closeIdleConnections(0, TimeUnit.MICROSECONDS); //再次調用確保回收
  17. }
  18. return result;


終極方法

client  = new .... (重新實例化client)




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM