Android 在WebView上自定义所有错误页面

Android 在WebView上自定义所有错误页面,android,redirect,webview,custom-error-pages,Android,Redirect,Webview,Custom Error Pages,我的WebView应用程序有一些问题。 我想为所有可能的错误页面(如连接丢失、服务器超时等)定制一个可在应用程序中脱机使用的错误页面 因此,这意味着如果出现任何问题,webview中将重定向到脱机页面。 我不想在超时或Internet连接丢失之间做出不同,我只想将所有可能的web错误重定向到脱机站点。 可能吗 我只想将所有可能的web错误重定向到脱机站点 我认为如果发生任何错误,您需要一个自定义的WebView类来进行URL重定向 MainActivity.java /* ... */ publ

我的WebView应用程序有一些问题。
我想为所有可能的错误页面(如连接丢失、服务器超时等)定制一个可在应用程序中脱机使用的错误页面

因此,这意味着如果出现任何问题,webview中将重定向到脱机页面。
我不想在超时或Internet连接丢失之间做出不同,我只想将所有可能的web错误重定向到脱机站点。 可能吗

我只想将所有可能的web错误重定向到脱机站点

我认为如果发生任何错误,您需要一个自定义的
WebView
类来进行URL重定向

MainActivity.java

/* ... */
public class MainActivity extends AppCompatActivity {

    MyWebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWebView = (MyWebView) findViewById(R.id.web_view);
        mWebView.loadUrl("https://www.google.com/");
    }

}
/* ... */
public class MyWebView extends WebView {

    public MyWebView(Context context) {
        super(context);
        initView(context);
    }

    public MyWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);

    }

    @SuppressLint("SetJavaScriptEnabled")
    private void initView(Context context){

        this.getSettings().setJavaScriptEnabled(true) ;
        this.getSettings().setUseWideViewPort(true);
        this.getSettings().setLoadWithOverviewMode(true);
        this.getSettings().setDomStorageEnabled(true);
        this.setWebViewClient(new WebViewClient() {

              @Override
              public void onReceivedError(final WebView view, int errorCode, String description,
                                          final String failingUrl) {

                      MyWebView.this.loadUrl("file:///android_asset/error.html");

              }

              @TargetApi(Build.VERSION_CODES.M)
              @Override
              public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError errorResponse) {

                      MyWebView.this.loadUrl("file:///android_asset/error.html");
              }
          });

    }

}
activity\u main.xml

<!-- ... -->
<your_package_name.MyWebView
    android:id="@+id/web_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
<!-- ... -->

记住把你的
error.html
放在
app/src/main/assets

里面,你可以把
error.html
放在你的离线网站上,它可以在线(有互联网)和离线(没有互联网)使用。两个州都可以成功打开
error.html
。我已经放弃设置使用Internet连接的权限。;)