2016-08-16 52 views
0

當在較低的api級別(如15或19(在仿真器和實際設備上))上嘗試我的應用時,我得到一個特定URL的UnknownHostException:http://jotihunt-api_v2.mysite123.nl/login mysite123是虛構的。但是我沒有爲其他網址(例如google)獲得UnknownHostException。所以我似乎URL是錯誤的,但在API級別22例如我不會得到這個例外。我有一個Internet連接和我有所需的權限:Android UnkownHostException在API級別較低的設備上

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

我使用此代碼執行後/ GET請求的web 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重刑我得到:

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 我可以解決與InetAdress主機,但它仍然無法正常工作

更新2 我發現類似的問題後,一些谷歌上搜索,似乎該下劃線不是有效的URL字符。

來源:

(我不能包含超過2個鏈接,所以我離開了鏈接出來的開始)

stackoverflow.com/questions/36074952/unknown-host-exception-using-emulator-和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-hostname-for-server-local)我認爲你的域名不存在。 –

+0

可能會有所幫助。 http://stackoverflow.com/questions/3293659/android-java-net-unknownhostexception-host-is-unresolved-strategy-question –

+0

該URL在桌面Web瀏覽器中返回404錯誤。 – CommonsWare

回答

相關問題