优化WebView错误处理和页面日志记录

This commit is contained in:
2026-04-23 10:12:28 +08:00
parent 7bcf862d06
commit 540e112c81
3 changed files with 48 additions and 13 deletions

Binary file not shown.

View File

@@ -860,6 +860,20 @@ public class MainActivity extends AppCompatActivity {
boolean hasSignIn = false; boolean hasSignIn = false;
private boolean isMainPageUrl(String targetUrl) {
return !TextUtils.isEmpty(targetUrl) && !TextUtils.isEmpty(url) && targetUrl.startsWith(url);
}
private void logWebViewUrl(String stage, String rawUrl) {
if (TextUtils.isEmpty(rawUrl)) {
LogUtils.i("WebViewURL[" + stage + "]: empty");
return;
}
Uri uri = Uri.parse(rawUrl);
String host = uri.getHost() == null ? "" : uri.getHost();
LogUtils.i("WebViewURL[" + stage + "]: " + rawUrl + " | host=" + host + " | scheme=" + uri.getScheme());
}
// WebView webViews; // WebView webViews;
WebViewClient webViewClient = new WebViewClient() { WebViewClient webViewClient = new WebViewClient() {
@@ -867,12 +881,14 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public void onPageStarted(WebView webView, String s, Bitmap bitmap) { public void onPageStarted(WebView webView, String s, Bitmap bitmap) {
super.onPageStarted(webView, s, bitmap); super.onPageStarted(webView, s, bitmap);
logWebViewUrl("onPageStarted", s);
} }
@Override @Override
public void onPageFinished(WebView webView, String s) { public void onPageFinished(WebView webView, String s) {
super.onPageFinished(webView, s); super.onPageFinished(webView, s);
logWebViewUrl("onPageFinished", s);
// LogUtils.i("URL是啥加载完成" + webView.getUrl()); // LogUtils.i("URL是啥加载完成" + webView.getUrl());
if (webView.getUrl().contains("hasSignIn")) { if (webView.getUrl().contains("hasSignIn")) {
hasSignIn = true; hasSignIn = true;
@@ -903,12 +919,15 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public WebResourceResponse shouldInterceptRequest(WebView webView, String s) { public WebResourceResponse shouldInterceptRequest(WebView webView, String s) {
logWebViewUrl("shouldInterceptRequestLegacy", s);
return super.shouldInterceptRequest(webView, s); return super.shouldInterceptRequest(webView, s);
} }
@Override @Override
public WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest) { public WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest webResourceRequest) {
if (webResourceRequest != null && webResourceRequest.getUrl() != null) {
logWebViewUrl("shouldInterceptRequest", webResourceRequest.getUrl().toString());
}
return super.shouldInterceptRequest(webView, webResourceRequest); return super.shouldInterceptRequest(webView, webResourceRequest);
} }
@@ -919,10 +938,9 @@ public class MainActivity extends AppCompatActivity {
int errorCode = error.getErrorCode(); int errorCode = error.getErrorCode();
String errorMessage = error.getDescription().toString(); String errorMessage = error.getDescription().toString();
String currentUrl = request.getUrl().toString(); String currentUrl = request.getUrl().toString();
if ((errorCode == -2 || errorCode == -6) && currentUrl.contains(url)) { LogUtils.i("WebViewURL[onReceivedError]: url=" + currentUrl + " | code=" + errorCode + " | msg=" + errorMessage);
if (isMainPageUrl(currentUrl)) {
onShowErrorView(errorMessage); onShowErrorView(errorMessage);
} else {
onShowNetView();
} }
} }
activityMain2Binding.progressbar.setVisibility(View.GONE); activityMain2Binding.progressbar.setVisibility(View.GONE);
@@ -930,6 +948,7 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) {
LogUtils.i("WebViewURL[onReceivedSslError]: url=" + (webView == null ? "" : webView.getUrl()) + " | primaryError=" + sslError.getPrimaryError() + " | urlString=" + sslError.getUrl());
sslErrorHandler.proceed(); sslErrorHandler.proceed();
} }
@@ -937,10 +956,9 @@ public class MainActivity extends AppCompatActivity {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl); super.onReceivedError(view, errorCode, description, failingUrl);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
if ((errorCode == -2 || errorCode == -6) && failingUrl.contains(url)) { LogUtils.i("WebViewURL[onReceivedErrorLegacy]: url=" + failingUrl + " | code=" + errorCode + " | msg=" + description);
if (isMainPageUrl(failingUrl)) {
onShowErrorView(description); onShowErrorView(description);
} else {
onShowNetView();
} }
} }
activityMain2Binding.progressbar.setVisibility(View.GONE); activityMain2Binding.progressbar.setVisibility(View.GONE);
@@ -950,6 +968,7 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
public boolean shouldOverrideUrlLoading(WebView webView, String url1) { public boolean shouldOverrideUrlLoading(WebView webView, String url1) {
logWebViewUrl("shouldOverrideUrlLoading", url1);
if (url1.equals(url + "index") || url1.equals(url + "/index")) { if (url1.equals(url + "index") || url1.equals(url + "/index")) {
isAtGame = false; isAtGame = false;

View File

@@ -33,6 +33,20 @@ public class WebViewActivity extends AppCompatActivity {
ActivityMain2Binding activityMain2Binding; ActivityMain2Binding activityMain2Binding;
private String url; private String url;
private boolean isMainPageUrl(String targetUrl) {
return targetUrl != null && url != null && !url.isEmpty() && targetUrl.startsWith(url);
}
private void logWebViewUrl(String stage, String rawUrl) {
if (rawUrl == null || rawUrl.isEmpty()) {
LogUtils.i("WebViewURL[" + stage + "]: empty");
return;
}
Uri uri = Uri.parse(rawUrl);
String host = uri.getHost() == null ? "" : uri.getHost();
LogUtils.i("WebViewURL[" + stage + "]: " + rawUrl + " | host=" + host + " | scheme=" + uri.getScheme());
}
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -105,6 +119,7 @@ public class WebViewActivity extends AppCompatActivity {
newWebView.setWebViewClient(new WebViewClient() { newWebView.setWebViewClient(new WebViewClient() {
@Override @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { public boolean shouldOverrideUrlLoading(WebView view, String url) {
logWebViewUrl("childShouldOverrideUrlLoading", url);
activityMain2Binding.progressbar.setVisibility(View.GONE); activityMain2Binding.progressbar.setVisibility(View.GONE);
activityMain2Binding.webview.loadUrl(url); activityMain2Binding.webview.loadUrl(url);
return true; return true;
@@ -147,6 +162,7 @@ public class WebViewActivity extends AppCompatActivity {
@Override @Override
public void onPageFinished(WebView view, String url) { public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url); super.onPageFinished(view, url);
logWebViewUrl("onPageFinished", url);
activityMain2Binding.showTopLy.setVisibility(View.GONE); activityMain2Binding.showTopLy.setVisibility(View.GONE);
activityMain2Binding.progressbar.setVisibility(View.GONE); activityMain2Binding.progressbar.setVisibility(View.GONE);
activityMain2Binding.topVvvv.setVisibility(View.VISIBLE); activityMain2Binding.topVvvv.setVisibility(View.VISIBLE);
@@ -156,6 +172,7 @@ public class WebViewActivity extends AppCompatActivity {
@Override @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) { public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon); super.onPageStarted(view, url, favicon);
logWebViewUrl("onPageStarted", url);
activityMain2Binding.progressbar.setVisibility(View.VISIBLE); activityMain2Binding.progressbar.setVisibility(View.VISIBLE);
activityMain2Binding.topVvvv.setVisibility(View.VISIBLE); activityMain2Binding.topVvvv.setVisibility(View.VISIBLE);
} }
@@ -167,11 +184,10 @@ public class WebViewActivity extends AppCompatActivity {
int errorCode = error.getErrorCode(); int errorCode = error.getErrorCode();
String errorMessage = error.getDescription().toString(); String errorMessage = error.getDescription().toString();
String currentUrl = request.getUrl().toString(); String currentUrl = request.getUrl().toString();
LogUtils.i("WebViewURL[onReceivedError]: url=" + currentUrl + " | code=" + errorCode + " | msg=" + errorMessage);
LogUtils.d("onReceivedError2 url==" + url + " errorCode ==" + errorCode); LogUtils.d("onReceivedError2 url==" + url + " errorCode ==" + errorCode);
if ((errorCode == -2 || errorCode == -6) && currentUrl.contains(url)) { if (isMainPageUrl(currentUrl)) {
onShowErrorView(errorMessage); onShowErrorView(errorMessage);
} else {
onShowNetView();
} }
} }
activityMain2Binding.topVvvv.setVisibility(View.GONE); activityMain2Binding.topVvvv.setVisibility(View.GONE);
@@ -182,10 +198,8 @@ public class WebViewActivity extends AppCompatActivity {
super.onReceivedError(view, errorCode, description, failingUrl); super.onReceivedError(view, errorCode, description, failingUrl);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
LogUtils.d("onReceivedError2 url==" + failingUrl + " errorCode ==" + errorCode); LogUtils.d("onReceivedError2 url==" + failingUrl + " errorCode ==" + errorCode);
if ((errorCode == -2 || errorCode == -6) && failingUrl.contains(url)) { if (isMainPageUrl(failingUrl)) {
onShowErrorView(description); onShowErrorView(description);
} else {
onShowNetView();
} }
} }
activityMain2Binding.topVvvv.setVisibility(View.GONE); activityMain2Binding.topVvvv.setVisibility(View.GONE);
@@ -203,6 +217,7 @@ public class WebViewActivity extends AppCompatActivity {
uri = Uri.parse(request.toString()); uri = Uri.parse(request.toString());
} }
String url1 = uri.toString(); String url1 = uri.toString();
logWebViewUrl("shouldOverrideUrlLoading", url1);
if (url1.equals(url + "index") || url1.equals(url + "/index")) { if (url1.equals(url + "index") || url1.equals(url + "/index")) {
activityMain2Binding.topVvvv.setVisibility(View.GONE); activityMain2Binding.topVvvv.setVisibility(View.GONE);
} else { } else {
@@ -241,6 +256,7 @@ public class WebViewActivity extends AppCompatActivity {
@Override @Override
public boolean shouldOverrideUrlLoading(WebView view, String url1) { public boolean shouldOverrideUrlLoading(WebView view, String url1) {
logWebViewUrl("shouldOverrideUrlLoadingLegacy", url1);
if (url1.equals(url + "index") || url1.equals(url + "/index")) { if (url1.equals(url + "index") || url1.equals(url + "/index")) {
activityMain2Binding.topVvvv.setVisibility(View.GONE); activityMain2Binding.topVvvv.setVisibility(View.GONE);
} else { } else {