0

I am trying to start an activity (Errorpage) when webview failed to load content.But there is no error during the build, but the app closes, while inernet is off. It was supposed to launh the Errorpage activity.

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import androidx.appcompat.app.AppCompatActivity;

    public class smwebview extends AppCompatActivity {
    private WebView webview;
    private ProgressBar spinner;
     String ShowOrHideWebViewInitialUse = "show";
        private WebView mWebView; //added for back buton override
        public boolean mShouldPause = false; 
    String fullurl;
    private ProgressBar spinner;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_smwebview);
            
              getIntent();
            fullurl= getIntent().getStringExtra("full_url");
             webview = (WebView) findViewById(R.id.webView_Latest);
              webview.setWebViewClient(new CustomWebViewClient());
               spinner = (ProgressBar)findViewById(R.id.progressBar2);
               webview.getSettings().setJavaScriptEnabled(true);
            webview.getSettings().setDomStorageEnabled(true);
            webview.getSettings().setAppCacheEnabled(true);
            webview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
            webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// keep screen on
            webview.loadUrl(fullurl);
            private class CustomWebViewClient extends WebViewClient {
            @Override
            public void onPageStarted(WebView webview, String url, Bitmap favicon) {
                if (ShowOrHideWebViewInitialUse.equals("show")) {
                    webview.setVisibility(webview.INVISIBLE);
                }
            }
            @Override
            public void onLoadResource(WebView webview, String url) {
                super.onLoadResource(webview, url);
                if (url.contains("youtube.com")) mShouldPause = true;
            }

            public void onReceivedError(WebView webview, int errorCode, String description, String failingUrl) {
                Intent intent7 = new Intent(smwebview.this,Errorpage.class);
               startActivity(intent7);

            }
            @Override
            public void onPageFinished(WebView view, String url) {
                ShowOrHideWebViewInitialUse = "hide";
                spinner.setVisibility(View.GONE);

                view.setVisibility(webview.VISIBLE);
                super.onPageFinished(view, url);

            }

        }
        public class WebViewClient extends android.webkit.WebViewClient {
            @Override
            public void onPageStarted(WebView webview, String url, Bitmap favicon) {
                if (ShowOrHideWebViewInitialUse.equals("show")) {
                    webview.setVisibility(webview.INVISIBLE);
                }
            }
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                ShowOrHideWebViewInitialUse = "hide";
                spinner.setVisibility(View.GONE);

                view.setVisibility(webview.VISIBLE);
                super.onPageFinished(view, url);

            }
        }
        @Override
        public void onResume()
        {
            super.onResume();
            webview.onResume();
        }

        @Override
        public void onPause() {
            super.onPause();
            if(mShouldPause){
                webview.onPause();
            }
            mShouldPause = false;
        }
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {

            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_BACK:
                        if (webview.canGoBack()) {
                            webview.goBack();
                        } else {
                            super.onBackPressed();
                        }
                        return true;
                }

            }
            return super.onKeyDown(keyCode, event);
        }

    }

If anybody have any idea Please help me. Also please comment your suggestions on the code/logic. (I am very new to android programming)

1 Answers1

0

Internet if off. Its different scenario you must add check internet connection before load. Or onRwleceiveError is different case. When you load wrong url or utl you entered is not working

Vikas
  • 432
  • 4
  • 17