본문 바로가기

ANDROID

connection still allocated 오류 해결 방법

HttpClient 를 사용중 아래와 같은 오류가 발생 한다.


W/SingleClientConnManager(22006): Invalid use of SingleClientConnManager: connection still allocated


또는



Exception in thread java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.

Make sure to release the connection before allocating another one.



연결중에 앱이 종료됬다던가 여차저차 기존 HttpClient가 할당되어있을때 발생한다..

그래서 HttpClient를 새롭게 할당하는 부분을 바꿔주어야한다..


아래 함수를 이용한다.


public static DefaultHttpClient getThreadSafeClient()  {

        DefaultHttpClient client = new DefaultHttpClient();
        ClientConnectionManager mgr = client.getConnectionManager();
        HttpParams params = client.getParams();
        client = new DefaultHttpClient(new ThreadSafeClientConnManager(params, 

                mgr.getSchemeRegistry()), params);
        return client;
}


보통 HttpClient = New DefaultHttpClient(); 처럼 Client를 새로 할당해주는 부분을


httpclient = getThreadSafeClient(); 로 바꾸어주면 이미 할당되어 있으면 할당된 Client를 반환해 이후에 문제는 발생하지 않습니다.





위 getThreadSafeClient함수는 http://foo.jasonhudgins.com/2010/03/http-connections-revisited.html에서 발췌하였습니다.