может ли webview запустить действие при получении ошибки?

#android #android-studio #android-webview #android-webview-javascript

#Android #android-studio #android-webview #android-webview-javascript

Вопрос:

Я пытаюсь запустить действие (Errorpage), когда webview не удалось загрузить содержимое.Но во время сборки ошибки нет, но приложение закрывается, а интернет выключен. Предполагалось запустить действие 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)

Ответ №1:

Интернет, если выключен. В другом сценарии вы должны добавить проверку подключения к Интернету перед загрузкой. Или onRwleceiveError — это другой случай. При загрузке неправильного URL или введенного вами utl не работает