2012-10-30 6 views
1

Android 용 애플리케이션을 작성하고 있습니다. 응용 프로그램은 주석을 검색하기 위해 서버에 연결합니다. 관심의 코드는 다음과 같습니다Android 4.0 이상에서 httpclient.execute (httppost) 문제가 발생했습니다.

BufferedReader input = null; 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://www.domain.com/personal_proj/directorydirectory/file.php"); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = httpclient.execute(httppost); 
Log.i("TEST","after httpclient.execute()"); 
HttpEntity entity = response.getEntity(); 

나는 HTC 산불, HTC 디자 이어 Z에서이 코드를 테스트하고 그것을 작동합니다. 이 코드는 안드로이드 4.0 이상에서 실행되는 경우,이 라인

Log.i("TEST","after httpclient.execute()"); 

에 도달하지, 서버는 요청을 받으면 결코 그 예외가 발생하지 않습니다.

아이디어가 있으십니까?

답변

0

찰리 콜린스 덕분에 예외를 잘 처리하지 못했다는 것을 알았습니다. 내가 캡처 한 예외는 android.os.NetworkOnMainThreadException입니다. 즉, 주 스레드에서 네트워킹 작업을 수행 할 수 없다는 것을 의미합니다 (3.0+를 대상으로하는 응용 프로그램의 경우 발생합니다). AsyncTask를 사용하면 저에게 도움이되었습니다.

4

내가 기본 연결 및 소켓 시간 초과 매개 변수가 DefaultHttpClient 구성 노 인수를 위해 무엇인지 모르겠지만, 나는 그것을 확인하거나 PARAMS 설정 한 것 : 그런 다음 구성

HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 15000); HttpConnectionParams.setSoTimeout(params, 20000);

당신의 HttpClient를 params 객체를 파라미터로 : 다른 응답 경우

new DefaultHttpClient(params)

그 시점에서 적어도, 시간 제한을 받아야합니다.

AndroidHttpClient (그 밖에도 gzip 지원과 같은 적절한 시간 제한을 설정 함)을 확인하고 prefer HttpUrlConnection에 대한 조언을 고려해보십시오 (단점이 있지만).

+0

설명하기가 이상하지만 도움을 받아 예외를 잘 처리하지 못했다는 것을 알았습니다. 내 대답을 보라. – user1148096

+0

다행이다.하지만 네, 네트워크 운영이나 다른 장기간 백그라운드 작업을 메인 스레드에서해서는 안됩니다. –

관련 문제