2017-05-04 4 views
0

私はアドレスがReachableかどうかをチェックする書き込み機能を持っていますが、私の問題は応答が遅い、タイムアウトするとUIがフリーズする時間です。例外。URLがReachable Androidのタイムアウトレスポンスであることを確認

My機能は次のとおりです。

public static boolean isURLReachable() { 
    ConnectivityManager cm = (ConnectivityManager) App.getContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
     try { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     URL url = new URL(ConfigData.CHECK_IP); 
     HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
         urlc.setConnectTimeout(TIME_OUT_CALL); 
         urlc.setReadTimeout(TIME_OUT_CALL); 
         urlc.connect(); 
         if (urlc.getResponseCode() == 200) {  // 200 = "OK" code (http connection is fine). 
          return true; 
         } else { 
          return false; 
         } 
        } catch (MalformedURLException e1) { 
         return false; 
        } 
        catch (java.net.SocketTimeoutException e) { 
         return false; 
        } catch (IOException e) { 
         return false; 
        } 
       } 
       return false; 
      } 

UIをブロックしないようにする方法はありますか?

答えて

0

あなたはこのためにソケットを使用することができます。ありがとうこんにちは

public static boolean isURLReachable() { 
    final URL url = new URL("your url here"); 

    final Socket socket = new Socket(); 
          socket.setSoTimeout(200); 
          socket.connect(new InetSocketAddress(url.getHost(),url.getPort()),200); 
        isConect =socket.isConnected(); 
        socket.close(); 
      return isConect; 
} 


where 200 is the required timeout. 
+0

! IllegalArgumentExceptionホストエラーを返します – LorenzoBerti

+0

"http://stackoverflow.com/"または "http://127.0.0.1/"のようなあなたのURLはありますか? –

+0

私は両方とも試してみましたが、デバッグにはエラーがありますsocket.connect() 今私はこれを持っています:socket.connect(new InetSocketAddress( "192.168.1.20"、80)、2000); – LorenzoBerti

関連する問題