2017-03-15 7 views
0

Ich versuche zu überprüfen, ob die Server-URL in Android erreichbar ist oder nicht. URL, die ich überprüfen möchte, ist wie folgt: https://mydomain.se:8081/ und auch aus dem Internet erreichbar. Aber ein Problem wie irgendwann unter Methode zu bekommen, kehrt wahr und einige Zeit falsch.So überprüfen Sie, ob die URL erreichbar ist oder nicht

public boolean isBackendAccessAble(String serverUrl) { 
    String host = serverUrl.substring(serverUrl.indexOf("://") + 3, serverUrl.lastIndexOf(":")); 
    int port = Integer.parseInt(serverUrl.substring(serverUrl.lastIndexOf(":") + 1, serverUrl.length() - 1)); 
    boolean isReachable = false; 
    try { 
     SocketAddress sockAddress = new InetSocketAddress(host, port); 
     Socket sock = new Socket(); 
     int timeoutMs = 2000; // 2 seconds 
     sock.connect(sockAddress, timeoutMs); 
     isReachable = true; 
    } catch (Exception e) { 
     Log.w(TAG, "Unable to check serverUrl:" + serverUrl); 
    } 
    return isReachable; 
} 

Gibt es noch eine andere Alternative, um den Server von Android über mobile Daten zu überprüfen?

+0

Ja offcourse mobile haben. sogar ich kann die Back-End-URL von Telefon-Browser durchsuchen. –

+0

Also, Ihre Methode gibt wahr oder falsch auch mit Internetverbindung zurück? – AMB

+0

Ja. Irgendwann gibt es mich wieder wahr und irgendwann wieder falsch. –

Antwort

-2
public boolean isBackendAccessAble(String serverUrl) { 
    String host = serverUrl.substring(serverUrl.indexOf("://") + 3, serverUrl.lastIndexOf(":")); 
    int port = Integer.parseInt(serverUrl.substring(serverUrl.lastIndexOf(":") + 1, serverUrl.length() - 1)); 
    boolean isReachable = false; 
    try { 
     SocketAddress sockAddress = new InetSocketAddress(host, port); 
     Socket sock = new Socket(); 
     int timeoutMs = 2000; // 2 seconds 
     sock.connect(sockAddress, timeoutMs); 
     isReachable = true; 
    } catch (Exception e) { 
     Log.w(TAG, "Unable to check serverUrl:" + serverUrl); 
if (e instanceof SocketTimeoutException){ 
    //the url is not reachable 
isReachable=false; 
} 
    } 
    return isReachable; 
} 
+0

Ich finde ein Problem. Dies liegt daran, dass diese Methode von einem Hauptthread aufgerufen wird, so dass es irgendwann eine Ausnahme gibt: android.os.NetworkOnMainThreadException. Kann mir jemand einen Hinweis geben, wenn ich einen neuen Thread verwende und diese Verbindung mit run nutze, wie kann ich warten bis der Thread fertig ist und die Antwort zurück geben? –

Verwandte Themen