2012-07-18 3 views
0

Android 애플리케이션에서 다음 코드와 관련하여 비정상적인 문제가 있습니다. 내가 로컬 호스트에 연결을 시도 응용 프로그램. (AN AsyncTask를에서)Android의 이상한 HttpResponse

InputStream source = retrieveStream("http://10.0.2.2:27080/testdb/_hello") 

에뮬레이터에서 실행,이 코드는 잘 작동하고 로컬 호스트가 다운되면, "소스"내

public InputStream retrieveStream(String url) { 

    HttpGet request = new HttpGet(url); 

    HttpParams httpParams = new BasicHttpParams(); 
    int some_reasonable_timeout = (int) (10 * DateUtils.SECOND_IN_MILLIS); 
    HttpConnectionParams.setConnectionTimeout(httpParams, some_reasonable_timeout); 
    HttpConnectionParams.setSoTimeout(httpParams, some_reasonable_timeout); 
    HttpClient client = new DefaultHttpClient(httpParams); 

    try 
    { 
     HttpResponse response = client.execute(request); 

     final int statusCode = response.getStatusLine().getStatusCode(); 
     if (statusCode == HttpStatus.SC_OK){ 

     HttpEntity getResponseEntity = response.getEntity(); 
      return getResponseEntity.getContent(); 
     } 
     else 
     { 
      Log.w(getClass().getSimpleName(), 
        "Error " + statusCode + " for URL " + url); 
       return null; 
     } 
    } 
    catch (ClientProtocolException e) 
    { 
     Log.e("Methods", "HTTP Error", e); 
     return null; 

    } 
    catch (IOException e) 
    { 
     Log.e("Methods", "Connection Error", e); 
     return null; 

    } 
} 

예상대로 null로 리턴됩니다. 모바일 장치 (HTC Nexus One, Android 버전 2.2)에서 코드를 실행하는 경우 코드는 "source"를 예상대로 null로보고합니다. 다른 휴대 기기 (삼성 Galaxy S2, Android 버전 4.0.3, 삼성 출시)에서 동일한 APK를 실행하는 경우 반환되는 상태 코드는 로컬 호스트에 연결할 수 없더라도 HttpStatus.SC_OK로 지정됩니다. 비슷한 문제가 발생한 사람이 있습니까?

+0

에뮬레이터/HTC Nexus One과 마찬가지로 (adb 디버그를 통해) Galaxy S2에 설치/실행하거나 직접 adb 연결없이 apk를 설치하고 실행 하시겠습니까? – yorkw

+0

안녕하세요, 의견을 주셔서 감사합니다, 나는 행운과 두 접근 방식을 시도했다. – user1015492

답변

1

Android 3.0은 Main UI Thread에서 웹 요청을 허용하지 않습니다. 웹 요청을하려면 AsyncTask을 사용해야합니다. IN android> 3.0

+0

안녕하세요, 응답 주셔서 감사하지만, 그 방법은 실제로 AsyncTask의 doInBackround 메서드에서 호출되는 언급 했어야했다. 나는 이것을 진술하기 위해 질문을 업데이트했다. – user1015492