2012-06-12 1 views
1

내 앱에서 웹 서버에 액세스 할 수 있습니다. 일부 휴대폰에서는 괜찮 았지만 테스트 중에는 Samsung Galaxy 모델 번호 - GT-S5830i Android 버전 - 2.3.6 알 수없는 호스트 예외를 계속 표시합니다. 브라우저에서 URL을 확인한 결과 정상적으로 작동합니다.가끔 내 앱이 UnknownHostException과 충돌합니다.

private void submitUploadData(String url ,Map<String, String> param) throws IOException 
{ 
    URL siteUrl; 
    try { 
     siteUrl = new URL(url); 
    HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection(); 
    conn.setRequestMethod("POST"); 
    conn.setDoOutput(true); 
    conn.setDoInput(true); 

    DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 

    Set getkey = param.keySet(); 
    Iterator keyIter = getkey.iterator(); 
    String content = ""; 
    for(int i=0; keyIter.hasNext(); i++) { 
     Object key = keyIter.next(); 
     if(i!=0) { 
      content += "&"; 
     } 
     content += key + "=" + param.get(key); 
    } 
    out.writeBytes(content.trim()); 
    out.flush(); 
    out.close(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line = ""; 
    while((line=in.readLine())!=null) { 
     System.out.println(line); 
    } 
    in.close(); 
    //Intent home = new Intent(SyncHttp.this,TimeAndExpensesSKActivity.class); 
    //startActivity(home); 
    db.updateTimeExported(1); 
    db.updateExpensesExported(1); 
    db.close(); 
    db.close(); 

    if(db.getLogCount()==0){ 
      db.insertSyncDateDetails(getDateandTime());} 
      else{ 
      db.updateSyncDateDetails(1, getDateandTime());} 


    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    this.setResult(FINISH_RESULT); 
    db.close(); 
} 

이미 권한

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

나는이 예외가 발생하는 이유는 정말 혼란 스러워요을 추가했습니다.

도움 주셔서 감사합니다.

+0

"Samsung Galaxy"는 많은 기기에 제공되는 일반적인 제목입니다. 이 오류가 발생하는 기기에 대해 더 구체적으로 설명해 주시겠습니까? 또한이 때 장치가 wifi 또는 3g/4g를 통해 인터넷에 연결되어 있습니까? – FoamyGuy

+0

주소가 맞습니까? – sebap123

+0

@Tim 고마워요. 내가 편집 한 게시물 ..그것을 확인하시기 바랍니다 – GoCrazy

답변

1

내 앱에서도이 작업을 수행했습니다. 이것은 대개 불안정한 네트워크 연결로 인해 발생합니다. 내가 한 것은 UnknownHostException을 잡아서 UnknownHostException이 발생하면 몇 밀리 초가 지나면 URL을 다시 페치하려고 시도하는 방식으로 코드를 수정합니다. - 그 라인을 주석 시도

private void submitUploadData(String url ,Map<String, String> param) throws IOException 
{ 
    URL siteUrl; 
    boolean isDataSubmitted = false; 
    while(!isDataSubmitted){ 
     try { 
      //do your complicated http process 
      isDataSubmitted = true; 
     } catch(UnknownHostException uhe){ 
      e.printStackTrace(); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

대답 해 주셔서 감사합니다 .. 나는 이것이 작동합니다 .. 만약 당신이 인터넷 연결이 가능하지 않다면 어떻게 했을까? 오랜 시간 ... – GoCrazy

+0

알 수없는 호스트 예외를 처리하는 코드를 게시 할 수 있다면 ... – GoCrazy

+0

@vino 님이 답변을 – ariefbayu

-1

휴대 전화의 브라우저에서 URL을 확인 했습니까? 전달한 URL을 함수에 기록한 후 휴대 전화의 브라우저에서 사용해보십시오. 내가 누락/잘못된 프로토콜 지정자 및 URL 문자열 형성이 특정 전화가 용서하지 않는 문제를 생각할 것입니다.

+0

그는 그가 브라우저에서 체크 원래 질문에 명시된 ... – FoamyGuy

+0

그것은 동일한 전화라고 언급하지 않았다. 특정 전화가 네트워크에 연결되지 않았거나 URL에 액세스 할 수없는 방식으로 연결되지 않았을 수도 있으므로 같은 전화를 확인하는 것이 중요합니다. –

1

나는 또한 삼성 Galaxy TAB에서 URLConnections, 특히 HTTPS를 사용하여 몇 가지 문제를 겪었지만 동일한 모델의 톤이 다른 시장 및 모바일 용으로 만들어 졌기 때문에 다른 모델에서도 발생할 수 있다고 생각합니다. 공급자.

URLConnection 클래스를 피하는 경향이 있기 때문에 지금까지 미안한 방법을 찾지 못했습니다. 많은 문제가 있기 때문에.

Apache HTTP 클라이언트를 사용하여 API와 통신하는 것이 좋습니다. 당신은 그것을 사용하는 톤의 구글 톤 수 있습니다.

또한 코드를 살펴볼 때 java에서 try-catch-finally 블록 문으로 조금 더 읽는 것이 좋습니다. 끝나거나 오류가있는 경우 제대로 연결을 닫는 것이 중요합니다.

다른 가능성은 다음과 같습니다

  1. 활성화 (모바일 또는 와이파이) 어떤 종류의 어떤 연결

  2. 당신은 누락이 없다 "HTTP를 :. // www가" 당신의 URL에.

+0

귀하의 제안에 감사드립니다 ...하지만 지금은 그 단계를 완료하기 때문에 그것을 할 수 ... – GoCrazy

0

내가 (가까운 호출 생각)을 DataOutputStream 정렬에 당신이 모든 연결을 닫을 수 입력을받을하기 전에 :

기본 알고리즘은이 같은 것입니다.