'Checking Connection to Server in Android Studio

Just as the title suggest, I have a problem with checking android connection to the server.

I have a project that I left for some month, back then the code that I used to check the server's connection was the answer from this question, but now when I opened this project again and try to run it, I can't seem to be able to reach the server.

This is my code to check the server's connection :

public static boolean isServerConnected() {
    try {
        URL myUrl = new URL(URL_CONNECTION);
        URLConnection connection = myUrl.openConnection();
        connection.setConnectTimeout(10000);
        connection.connect();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

And this is where I call it (in a login button) :

btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (Servers.isServerConnected()) {
                username = edtUser.getText().toString();
                password = edtPass.getText().toString();
                login();
            } else {
                Toast.makeText(getApplicationContext(), "Server is not connected", Toast.LENGTH_SHORT).show();
            }
        }
    });

This is the exception that I got :

D/NetworkSecurityConfig: No Network Security Config specified, using platform default
W/System.err: android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:333)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:196)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
    at java.net.Socket.connect(Socket.java:586)
    at com.android.okhttp.internal.Platform.connectSocket(Platform.java:113)
    at com.android.okhttp.Connection.connectSocket(Connection.java:196)
    at com.android.okhttp.Connection.connect(Connection.java:172)
    at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367)
    at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130)
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329)
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
    at 
com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
    at 
com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126)
    at com.itats.huwenakapp.koneksi.Servers.isServerConnected(Servers.java:38)
    at com.itats.huwenakapp.Login$1.onClick(Login.java:74)
    at android.view.View.performClick(View.java:5610)
    at 
com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
    at android.view.View$PerformClick.run(View.java:22265)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)


Solution 1:[1]

As stated in the exception log you are getting android.os.NetworkOnMainThreadException this occurs when you are performing a network call on Main Thread / UI Thread of android. To resolve this issue you have to perform the call on a background thread. This could include using a AsyncTask (depricated) or Coroutines (only for Kotlin) or RxJava or any other threading way to run the the call on background thread.

You can also check this question for answers.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Taranmeet Singh