android 如何加载一个自定义的错误页面在webview当没有互联网连接?

zpgglvta  于 2023-03-21  发布在  Android
关注(0)|答案(2)|浏览(146)

我试图找出我如何添加一个自定义离线页面到我的webview应用程序。该应用程序运行良好,我只是觉得像一个自定义离线页面会看起来更好!我已经在网上看了一些答案,但他们似乎不再工作:(。我希望有人能帮助!这里是我的主要代码是(在Android工作室):

package com.rizwan.yvsse;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

import com.onesignal.OneSignal;


public class MainActivity extends AppCompatActivity {
    WebView webView;
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        OneSignal.startInit(this)
                .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
                .unsubscribeWhenNotificationsAreDisabled(true)
                .init();

        Intent intent = new Intent(MainActivity.this, splash_screen.class);
        startActivity(intent);

        progressBar= (ProgressBar)findViewById(R.id.progressBar);
        webView = (WebView) findViewById(R.id.webview);
        String url="https://yvsse.com/billing/";
        webView.loadUrl(url);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.setWebViewClient(new HelloWebViewClient());


    }

    @Override
    public void onBackPressed() {

        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                    MainActivity.this);

            // set title
            alertDialogBuilder.setTitle("Exit");

            // set dialog message
            alertDialogBuilder
                    .setMessage("Do you really want to exit?")
                    .setCancelable(false)
                    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, close
                            // current activity
                            MainActivity.this.finish();
                        }
                    })
                    .setNegativeButton("No", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing
                            dialog.cancel();
                        }
                    });

            // create alert dialog
            AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();
        }
    }


    private class HelloWebViewClient extends WebViewClient {


        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView webView, String url) {

            webView.loadUrl(url);
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            progressBar.setVisibility(view.GONE);
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

        }



    }
}

谢谢大家!

rnmwe5a2

rnmwe5a21#

覆盖onReceivedError方法并检查其内部的Internet连接,以确认url是否因Internet连接而失败

@Override 
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
               if(!isappOnline()) {
               webView.loadUrl("file:///android_asset/error.html");
               }
        } 

        private boolean isappOnline() {
            ConnectivityManager cm = (ConnectivityManager) 
            getSystemService(Context.CONNECTIVITY_SERVICE);
            return cm.getActiveNetworkInfo() != null;
        }

也添加你的fallback页在assets文件夹src/main/assets/

oymdgrw7

oymdgrw72#

您可以在Web视图中使用Service Worker,例如:https://link.medium.com/xu2cVcvV6xb

相关问题