添加自定义 android webview 错误页面
Add custom android webview error page
在我的应用程序中,我想要一个错误 activity "NOT A ERROR HTML PAGE"。其中包含刷新按钮和布局。我已经搜索过它,但我发现它只是资产文件夹中的一个自定义 html 错误页面。
我在下面创建了一些代码,
我想要的是,当发生网络错误时,它会像这样打开一个 activity,用户可以使用按钮轻松刷新页面。
I want to make error page like this one..
这不是 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);
}
}
您可以创建一个包含 2 层的布局。一个是 WebView
,另一个是你的错误布局。当您的 WebView
遇到网络错误时,您可以隐藏您的 WebView
并使用重试按钮显示 errorView。
在您的代码中调用它
webview.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
//place you error code here
}
});
首先,您将 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);
}
.
.
.
}
在我的应用程序中,我想要一个错误 activity "NOT A ERROR HTML PAGE"。其中包含刷新按钮和布局。我已经搜索过它,但我发现它只是资产文件夹中的一个自定义 html 错误页面。
我在下面创建了一些代码, 我想要的是,当发生网络错误时,它会像这样打开一个 activity,用户可以使用按钮轻松刷新页面。
I want to make error page like this one..
这不是 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);
}
}
您可以创建一个包含 2 层的布局。一个是 WebView
,另一个是你的错误布局。当您的 WebView
遇到网络错误时,您可以隐藏您的 WebView
并使用重试按钮显示 errorView。
在您的代码中调用它
webview.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
//place you error code here
}
});
首先,您将 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);
}
.
.
.
}