0

am checking whether there is a network connection available in android. When the connection is lost or is unavailable a Dialog with a custom layout shows. when the connection is available again the dialog dismisses.

The app is crushing and am having an error that says only the original thread that created a view can touch its views

Declaring my dialog


private Dialog connectionDialog;

My dialog code inside onCreate method in activity

connectionDialog = new Dialog(this, android.R.style.Theme_NoTitleBar_Fullscreen);
        connectionDialog.setContentView(R.layout.layout_connection_dialog);
        connectionDialog.setCancelable(false);

Checking network connection availability code

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            NetworkRequest networkRequest = new NetworkRequest.Builder().build();

            networkCallback = new ConnectivityManager.NetworkCallback(){

                @Override
                public void onUnavailable() {
                    super.onUnavailable();
                    connectionDialog.show();
                }

                @Override
                public void onLost(@NonNull Network network) {
                    super.onLost(network);

                    connectionDialog.show();
                }

                @Override
                public void onAvailable(@NonNull Network network) {
                    super.onAvailable(network);

                    if (connectionDialog.isShowing()){
                        connectionDialog.dismiss();
                    }
                }
            };

            connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
       }

onStop method

@Override
    protected void onStop() {
        super.onStop();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        {
            connectivityManager.unregisterNetworkCallback(networkCallback);
        }

    }

The error am getting


E/AndroidRuntime: FATAL EXCEPTION: main
    Process: manu.apps.prochama, PID: 15785
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
        at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:8632)
        at android.view.ViewRootImpl.doDie(ViewRootImpl.java:7435)
        at android.view.ViewRootImpl.die(ViewRootImpl.java:7410)
        at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:520)
        at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:451)
        at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:210)
        at android.app.Dialog.dismissDialog(Dialog.java:577)
        at android.app.-$$Lambda$oslF4K8Uk6v-6nTRoaEpCmfAptE.run(Unknown Source:2)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

Markus Kauppinen
  • 3,025
  • 4
  • 20
  • 30
Emmanuel Njorodongo
  • 1,004
  • 17
  • 35

0 Answers0