2016-08-16 1 views
0

15 또는 19와 같은 낮은 API 레벨 (에뮬레이터 및 실제 기기)에서 앱을 테스트 할 때 특정 URL에 대해 UnknownHostException이 표시됩니다. http://jotihunt-api_v2.mysite123.nl/login mysite123은 가상입니다. 하지만 나는 다른 URL에 대해 UnknownHostException을 얻지 못합니다. 그래서 URL이 잘못 보이지만 API 레벨 22 예를 들어이 예외가 발생하지 않습니다. 나는 인터넷 연결을 가지고 있고 내가 필요한 권한이 있습니다API 레벨이 낮은 기기의 Android UnkownHostException

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

내가/게시물을 실행하는 웹 API에 요청을 얻기 위해이 코드를 사용합니다 :

@Override 
    protected List<WebResponse> doInBackground(WebRequest... params) { 
     ArrayList<WebResponse> responses = new ArrayList<>(); 
     WebRequest current; 

     for(int i = 0; i < params.length; i++) 
     { 
      current = params[i]; 

      try { 
       InetAddress address = InetAddress.getByName(current.getUrl().getHost()); 
       Log.i("WebRequestTask", address.toString()); 
      } catch (UnknownHostException exception) { 
       Log.e("WebRequestTask", exception.toString(), exception); 
      } 


      TRYCATCH: 
      try 
      { 
       if(current.getUrl() == null) break TRYCATCH; 

       HttpURLConnection connection = (HttpURLConnection)current.getUrl().openConnection(); 

       switch (current.getMethod()) 
       { 
        case WebRequestMethod.POST: 
         if(current.hasData()) 
         { 
          connection.setDoOutput(true); 
          connection.setRequestMethod(WebRequestMethod.POST); 

          OutputStreamWriter streamWriter = new OutputStreamWriter(connection.getOutputStream()); 
          streamWriter.write(current.getData()); 
          streamWriter.flush(); 
          streamWriter.close(); 
         } 
         break; 
       } 

       InputStream response; 
       if(connection.getResponseCode() == 200) 
       { 
         /* 
         * Get the response stream. 
         * */ 
        response = connection.getInputStream(); 
       } 
       else 
       { 
         /* 
         * Get the error stream. 
         * */ 
        response = connection.getErrorStream(); 
       } 

       /** 
       * Read the stream. 
       * */ 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response)); 
       StringBuilder builder = new StringBuilder(); 
       String line; 
       while ((line = bufferedReader.readLine()) != null) { 
        builder.append(line); 
       } 
       bufferedReader.close(); 

       /** 
       * Create a response 
       * */ 
       responses.add(new WebResponse(current, builder.toString(), connection.getResponseCode())); 

       current.setExecutionDate(new Date()); 

       connection.disconnect(); 

      } 
      catch(Exception e) 
      { 
       /** 
       * Print the stack trace 
       * */ 
       e.printStackTrace(); 

       /** 
       * Log a error. 
       * */ 
       Log.e("WebRequestTask", e.toString(), e); 

       /** 
       * Add a response with as text the error message 
       * */ 
       responses.add(new WebResponse(current, e.toString(), 0)); 
      } 
     } 
     return responses; 
    } 

객체의 상태 : http://imgur.com/8ehGBUf

요청의 생성 및 실행 :

WebRequest request = new WebRequest.Builder() 
      .setId(MY_REQUEST_ID) 
      .setMethod(WebRequestMethod.POST) 
      .setUrl(new UrlBuilder().append("http://jotihunt-api_v2.mysite123.nl/login").build()) 
      .setData("sfsf") 
      .create(); 
    request.executeAsync(new WebRequest.OnWebRequestCompletedCallback() { 
     @Override 
     public void onWebRequestCompleted(WebResponse response) { 
      Log.i("",response.getData()); 
     } 
    }); 

이것은 excep이고 기 내가 얻을 : 나는 InetAdress있는 호스트를 해결할 수 있습니다

08-16 12:33:36.340 4277-4356/nl.rsdt.japp W/System.err: java.net.UnknownHostException: http://jotihunt-api_v2.mysite123.nl/login 
08-16 12:33:36.342 4277-4356/nl.rsdt.japp W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:279) 
08-16 12:33:36.344 4277-4356/nl.rsdt.japp W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
08-16 12:33:36.346 4277-4356/nl.rsdt.japp W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
08-16 12:33:36.348 4277-4356/nl.rsdt.japp W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
08-16 12:33:36.352 4277-4356/nl.rsdt.japp W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89) 
08-16 12:33:36.355 4277-4356/nl.rsdt.japp W/System.err:  at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197) 
08-16 12:33:36.356 4277-4356/nl.rsdt.japp W/System.err:  at com.rsdt.anl.WebRequestTask.doInBackground(WebRequestTask.java:53) 
08-16 12:33:36.357 4277-4356/nl.rsdt.japp W/System.err:  at com.rsdt.anl.WebRequestTask.doInBackground(WebRequestTask.java:21) 
08-16 12:33:36.358 4277-4356/nl.rsdt.japp W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
08-16 12:33:36.359 4277-4356/nl.rsdt.japp W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
08-16 12:33:36.360 4277-4356/nl.rsdt.japp W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
08-16 12:33:36.365 4277-4356/nl.rsdt.japp W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
08-16 12:33:36.372 4277-4356/nl.rsdt.japp W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
08-16 12:33:36.373 4277-4356/nl.rsdt.japp W/System.err:  at java.lang.Thread.run(Thread.java:848) 

UPDATE,하지만 여전히 내가 좀 더 인터넷 검색 후 유사한 문제를 발견

업데이트 2 작동하지 않는 것 같습니다 그 밑줄은 유효한 URL 문자가 아닙니다.

출처 :

stackoverflow.com/questions/36074952/unknown-host-exception-using-emulator- (i가 2 개 이상의 링크를 포함 할 수 없습니다 그래서는 링크 밖으로의 시작 왼쪽) 와 - HttpURLConnection의

code.google.com/p/android/issues/detail?id=37577

github.com/google/ExoPlayer/issues/239

+0

야이 [링크] (HTTP를 참조하십시오. com/questions/6484275/java-net-unknownhostexception-invalid-host-for-server-local) 귀하의 도메인이 존재하지 않는다고 생각합니다. –

+0

이 도움이 될 수 있습니다. http://stackoverflow.com/questions/3293659/android-java-net-unknownhostexception-host-is-unresolved-strategy-question –

+0

이 URL은 데스크톱 웹 브라우저에서 404 오류를 반환합니다. – CommonsWare

답변