添加自定义android webview错误页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了添加自定义android webview错误页面相关的知识,希望对你有一定的参考价值。

在我的应用程序中,我想要一个错误活动“NOT A ERROR html PAGE”。其中包含刷新按钮和布局。我搜索它但我发现只是资产文件夹中的自定义html错误页面。

我创建了一些下面的代码,我想要的是,当发生网络错误时,它将打开这样的活动,用户可以使用按钮轻松刷新页面。

我想制作像这样的错误页面..

Error page with refresh button

这不是一个HTML错误页面。这包含带刷新按钮的布局,

public WebView mWebview ;
@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);
    mWebview  = new WebView(this);
    mWebview.getSettings().setjavascriptEnabled(true); // enable javascript

    mWebview.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {


            // Do Something Here,  I don't know what to do.. :(


        }
    });

    mWebview.loadUrl("google.com");
    setContentView(mWebview);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.option, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {

        case R.id.refresh:
            startActivity(new Intent(this, CeS1.class));
            finish();
            return true;

        case R.id.about:
            startActivity(new Intent(this, Credits_activity.class));
            finish();
            return true;

        case R.id.gotomain:
            startActivity(new Intent(this, MenuActivity.class));
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
答案

在你的代码中调用它

 webview.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
 //place you error code here
   }
});
另一答案

您可以创建包含2个图层的布局。一个是WebView,另一个是你的错误布局。当你的WebView遇到网络错误时,你可以隐藏你的WebView并显示带有重试按钮的errorView。

另一答案

首先,将HTML错误页面放在资产文件夹中,然后根据以下代码覆盖onReceivedError,

private class MyWebViewClient extends WebViewClient {
.
.
.

   // api<23
   @Override
   public void onReceivedError(WebView view, int errorCode, String description, String url) {
        view.stopLoading();
        webview.loadUrl("file:///android_asset/error/error.html");
    }

  // api> 23
  @Override
  @TargetApi(android.os.Build.VERSION_CODES.M) 
  public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
    view.stopLoading();
    webview.loadUrl("file:///android_asset/error/error.html");
//          super.onReceivedError(view, request, error);
  }
.
.
.

}

以上是关于添加自定义android webview错误页面的主要内容,如果未能解决你的问题,请参考以下文章

(源码)解决Android的WebView加载失败(404,500),显示的自定义视图

Android webview加载的页面怎样调试JS

Android webview加载的页面怎样调试JS

如何在现有的 webview android 中添加自定义按钮?

Appium+Java自动化测试 android混合APP的webview页面截图怎么截?

如何辨别webview页面