2016-08-16 2 views
0

15または19などの低レベルのAPI(エミュレータと実際のデバイス)でアプリを試してみると、特定のURLのUnknownHostExceptionが表示されます。http://jotihunt-api_v2.mysite123.nl/login mysite123は架空です。しかし、私はGoogleのような他のURLのUnknownHostExceptionを取得しません。だから私はURLが間違っているようだが、APIレベル22では、私はこの例外を取得しないでください。私は、インターネットに接続していると私は必要な権限があります。APIレベルが低いデバイスでAndroid UnkownHostExceptionが発生する

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

は私が/ポストを実行した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ですション私が手に:私は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が、それはまだ私はいくつかのより多くのグーグル後に同様の問題を発見した

UPDATE 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-host-for-server-local)あなたのドメインは存在しないと思います。 –

+0

これが役立つかもしれません。 http://stackoverflow.com/questions/3293659/android-java-net-unknownhostexception-host-is-unresolved-strategy-question –

+0

このURLは、デスクトップWebブラウザで404エラーを返します。 – CommonsWare

答えて

0

I Cアンダースコアを含まないようにホスト名をハングアップしましたが、これで私の問題は解決しました。古いAndroidのバージョンのDNSがアンダースコア

ソースでURLをサポートしていませんようだ:// stackoverflowの:

Similiar issue

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

関連する問題