0

当 webview 无法加载内容时,我正在尝试启动一个活动(Errorpage)。但是在构建过程中没有错误,但是应用程序关闭了,而 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, 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);
        }

    }

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

4

1 回答 1

0

互联网如果关闭。其不同的场景,您必须在加载前添加检查互联网连接。或者 onRwleceiveError 是不同的情况。当您加载错误的 url 或输入的 utl 时不起作用

于 2020-09-07T02:32:10.363 回答