2012-04-08 2 views
0

Android 3.1에 앱을 쓰고 있으며 Galaxy 탭 10.1을 사용하여 앱을 테스트하고 있습니다.HttpUrlConnection을 사용하여 특정 URL에서 정보를 다운로드 할 때 오류가 발생했습니다.

특정 웹 사이트에서 일부 정보를 얻으려면 OpenHttpConnection()이라는 함수를 작성했습니다. 그리고 코드 조각은 다음과 같습니다 라인 "httpConn.connect()가"실행되고있을 때

private InputStream OpenHttpConnection(String urlString) throws IOException { 
    InputStream in = null; 
    int response = -1; 

    URL url = new URL(urlString); 
    String host = url.getHost(); 
    InetAddress address = InetAddress.getByName(host); 
    String ip = address.getHostAddress(); 
    Toast.makeText(this, "ip address: " + ip.toString(), Toast.LENGTH_SHORT).show(); 

    try { 
     HttpURLConnection httpConn = (HttpURLConnection)url.openConnection(); 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setInstanceFollowRedirects(true); 
     httpConn.setConnectTimeout(5 * 1000); 
     httpConn.setRequestMethod("GET"); 
     Toast.makeText(this, "prepare for connecting", Toast.LENGTH_SHORT).show(); 
     httpConn.connect(); 
     Toast.makeText(this, "connecting established", Toast.LENGTH_SHORT).show(); 
     response = httpConn.getResponseCode(); 
     if (response == HttpURLConnection.HTTP_OK) { 
      in = httpConn.getInputStream(); 
     } 
    } catch (Exception ex) { 
     throw new IOException("Error connecting"); 
    } 
    return in; 
} 

오류가 발생합니다. 나는이 질문을봤을 때 많은 사람들이이 문제를 겪고 있으며 DNS 문제라고 말했다. 그런 다음이 URL의 IP 주소를 가져 오려고했는데 실패했습니다. 일이 잘못되었습니다. 나는 이미이 같은의 AndroidManifest.xml에 권한을 추가 한 :

<uses-permission android:name="android.permission.INTERNET"/> 

내가 어떤 권한을 그리워 했습니까?

태블릿을 사용하여 인터넷에 성공적으로 액세스 할 수 있으며 태블릿의 DNS는 내 PC와 동일하며 하나의 LAN에 있습니다.

저는 매우 혼란스럽고 해결할 수 있습니까?

) 나는 아마이 가능한 문제가 있음을 말할 수 있도록 최근에이 일을 했어요

+0

답변을 위해 OpenHttpConnection 또는 Logcat –

+0

게시 URL을 설명해주세요.하지만 도움이되지는 않습니다. 내 문제는 응용 프로그램이 올바른 IP 주소를 얻기 위해 DNS를 사용할 수 없다는 것입니다. 그리고이 코드와 작업을 Android 태블릿 시작 응용 프로그램 개발이라는 책에서 복사했지만 Handler 또는 AsyncTask는 언급하지 않았습니다. 어쨌든 Thx. –

답변

0

들으 :

  1. 당신은해야 당신이 배경에이 일을하고 있는지 스레드는 Handler 또는 AsyncTask을 사용합니다.

  2. UI 스레드에서 수행해야하는 경우 Strict mode을 해제해야합니다.

체크 아웃이 위대한 tutorial in running background threads in android은 튜토리얼의 AyncTask 부분은 실제로 웹 페이지가 너무 매우 관련이 다운로드합니다. 나는 최근에 그것을 시도하고 작동합니다.

+0

xx로 전달하는 오류 (Logcat 확인) –

+0

LogCat에서 얻은 오류를 게시하여보다 자세한 도움을 받으십시오. 그러나 나는 여전히 그것이 StrictMode와 관련이 있을지도 모른다고 생각한다. 내가 봤던 글은 모르지만 WIFI의 '멀티 캐스트'기능을 사용하면 'mDN'이 아니라 DNS와 관련이 있다는 의미 일 것입니다.이 경우에는 권한이 있습니다. 'CHANGE_WIFI_MULTICAST_STATE'라고합니다. – Ali

+0

아, 네가 맞다. Strict 모드를 끈 후에 앱이 성공적으로 실행된다. Thx 많이, 그리고 내 서둘러 사과. –

관련 문제