2013-07-06 2 views
0

AndroidHttpClient를 사용하여 로그인 페이지에 https 게시물 요청을하고 있습니다. 클라이언트 인스턴스는 다음과 같이 생성됩니다ssl을 사용할 때 AndroidHttpClient에서 .close를 호출하면 충돌이 발생합니다.

AndroidHttpClient client = AndroidHttpClient.newInstance("Android"); 

나중에 client.close를 호출 할 때 내 활동 충돌 https://mydomain.com/login하는 요청을 한 후().

연결이 유효한 응답을 반환하고 동일한 도메인 (http://mydomain.com/login)에서 ssl을 사용하지 않으면 모든 것이 제대로 작동하므로 crash없이 client.close()를 호출 할 수 있습니다.

나는 소스 코드를 보지 않았지만 이것에 관한 안드로이드의 문서는 매우 간단하다. 클라이언트와 관련된 리소스를 해제하기 위해 .close를 호출해야한다고 말하면된다. 이 예상되는 동작입니까 아니면 다른 것을 놓치고 있습니까? 이 유형의 객체에 대한 자원을 닫거나 해제하는 더 좋은 방법이 있습니까?

+0

logcat에 크래시가 표시되는지 확인하십시오. 그렇다면 logcat을 게시하십시오. – chr

+0

죄송합니다. 예외는 android.os.NetworkOnMainThreadException입니다. 나는 asyncTask의 onPostExecute에서 client.close()를 호출하고 있는데, 이는 asyncTask가 여전히 메인 스레드에 있지 않아야한다고 생각한다. – J2K

+0

http://developer.android.com/reference/android/os/AsyncTask.html에 따르면, onPostExecute'는 UI 스레드에서 호출됩니다. 그래도 도움이되지 않으면 코드를 더 게시하십시오. 코드가 크면 SSCCE로 만드십시오. – chr

답변

1

NetworkOnMainThreadException : onPreExecute, onProgressUpdate 및 onPostExecute의 세 가지 메소드는 UI 스레드에서 실행됩니다. 이는 AsyncTasks의 주요 포인트 중 하나입니다. close() 전화를 doInBackground()으로 이동하십시오.

0

죄송합니다. 이것은 일종의 멍청한 질문이었고, 주 스레드에서 실행되는 onPostExecute에서 client.close()를 호출하는 것과 관련이 있다고 생각하십니까? doInBackground 메서드로 이동하면 문제가 해결됩니다.

+0

Bernd S 대답을 정답으로 표시해야합니다. – Divers

관련 문제