webview可以在onReceivedError上启动活动吗?

问题描述

当webview无法加载内容时,我正在尝试启动一个活动(错误页面)。但是在构建过程中没有错误,但是应用程序关闭了,而Inernet关闭了。本来可以启动Errorpage活动。

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,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,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);
        }

    }

如果有人有任何想法,请帮助我。还请评论您对代码/逻辑的建议。 (我是android编程的新手)

解决方法

Internet(如果关闭)。在不同的情况下,必须在加载之前添加检查Internet连接。 或onRwleceiveError是不同的情况。当您加载错误的网址或utl时,您输入的内容无效