android webView错误处理

webView加载一个404的路径时,会出现not found这样的内容显示出来,但是有时候我们需要在出现这样问题后,做其他处理,所有我们要捕获他的错误,但是SDK的错误处理方法居然不会在加载错误以后回调:

public void onReceivedError (WebView view, int errorCode, String description, String failingUrl)
Since:  API Level 1

Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable). The errorCode parameter corresponds to one of the ERROR_* constants.

Parameters
view The WebView that is initiating the callback.
errorCode The error code corresponding to an ERROR_* value.
description A String describing the error.
failingUrl The url that failed to load.

没办法,我们要习惯容忍SDK这些问题,下面说一个解决方式,那就是在加载的时候 做一个处理,重新连接一下这个URL,看看返回的code是什么,然后做处理,如下

	private void checkWebViewUrl(final WebView webView, final String url) {
		if (url==null||url.equals("")) {
			return;
		}
		new AsyncTask<String, Void, Integer>() {

			@Override
			protected Integer doInBackground(String... params) {
				int responseCode = -1;
				try {
					URL url = new URL(params[0]);
					HttpURLConnection connection = (HttpURLConnection) url.openConnection();
					responseCode = connection.getResponseCode();
				} catch (Exception e) {
					log.e("Loading webView error:" + e.getMessage());
				}
				return responseCode;
			}

			@Override
			protected void onPostExecute(Integer result) {
				if (result != 200) {
					webView.setVisibility(View.GONE);
				} else {
					webView.loadUrl(url);
				}
			}
		}.execute(url);
	}


 补充一点:最新发现只有设备的网络状态处于断开的情况下才会进入onReceivedError方法,如果是URL路径对应的服务端返回了404是不会进入这个方法的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,Android WebView 支持 Fetch API。WebViewAndroid 平台上的一个组件,用于在应用程序显示网页内容。它是基于 Chromium 的,因此支持许多现代的 web 标准和 API,包括 Fetch API。 您可以在 WebView 使用 Fetch API 发送网络请求,获取数据并进行处理。以下是一个简单的示例: ```java // 创建 WebView 实例 WebView webView = new WebView(context); // 启用 JavaScript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // 在 WebView 加载网页 webView.loadUrl("https://www.example.com"); // 设置 WebViewWebViewClient webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // 在页面加载完成后,使用 Fetch API 发送请求 view.evaluateJavascript("fetch('https://api.example.com/data')" + ".then(response => response.json())" + ".then(data => {" + " // 处理返回的数据" + " console.log(data);" + "})" + ".catch(error => {" + " // 处理错误" + " console.error(error);" + "});", null); } }); ``` 在上面的示例,我们创建了一个 WebView 实例,并启用了 JavaScript 功能。然后,我们加载了一个网页,并在页面加载完成后使用 `evaluateJavascript` 方法来执行 JavaScript 代码,其包括使用 Fetch API 发送请求和处理返回的数据的逻辑。 请注意,为了使用 Fetch API,您需要确保在 WebView 启用了 JavaScript。另外,您还可以通过设置 WebViewClient 来处理页面加载和其他事件。这只是一个简单的示例,您可以根据您的具体需求进行自定义和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值